1:
if(pData != NULL) delete[] pData;
这句话 pData是一个全局变量, 结果加上这句话就出错 。 原因: pData没有初始化 造成其成为一个野指针, delete释放的时候释放错误的位置 造成出现错误弹窗!
2: 传输一些数据 直接传输没有问题 但是建立一个新线程进行传输 结果不能正常传输 !
原因: 建立新线程进行传输的时候 还没传输完毕的时候 主线程就已经关闭了传递给子线程的套接字! 所以失败!
3 打开屏幕接受窗口就卡死:
原因: 因为我没有使用多线程去接受传送过来的屏幕消息, 在接受的时候使用了while(1) 这就导致了死循环 。 即使使用sleep()也没有用 照样会卡死
把接收过程写成一个单独的线程 解决了问题
记住 只要使用while(1) 就要把这句话放到一个线程中去!!!
4 接收完毕图像数据后 将其保存为bmp图像存在e盘下面, 然后读取在MFC窗口显示 ,然而连续的接收被控端传递过来的数据,在显示了10几帧之后关闭显示窗口会出现断言错误!
原因:我把创建打开文件的句柄定义成局部变量,在某个循环中接收数据并写入bmp文件时,当关闭窗口时CloseHandle(hfile);来不及执行造成了断言错误! 解决方法:定义成全局变量,并在窗口关闭的时候检验是否关闭了文件句柄! 以及在新打开bmp图像时判断上次的是否关闭 关闭后再打开.
5 关于双缓冲的理解 我以前理解有错误 造成屏幕依旧闪烁 推荐给自己几个网站看下
http://blog.youkuaiyun.com/mzwang123/article/details/5054730
http://blog.sina.com.cn/s/blog_5be1061c0100cr1o.html
http://www.cnblogs.com/watsonlong/archive/2011/04/19/2021486.html
http://blog.163.com/yuanlong_zheng@126/blog/static/49846449201033093333394/
6 在窗口最上面放了几个按钮,准备在按钮下面显示图像 结果造成按钮周围出现屏幕图像 而且不是收到的屏幕的图像 刷新什么的 窗口覆盖都会残留图像在上面
纠结了一晚上 修改了所有能影响到图像大小的地方 修改了窗口 以及所有的MoveWindow(rect) 都没有用
后来反应过来 应该是因为我在窗口擦除函数里取消了函数的擦除 ,造成按钮周围的那片区域产生了空白色 不会被收到的图像填充 遇到窗口遮蔽就会把别的窗口印上去 故使用了下面重新进行填充解决了问题
::GetClientRect(this->m_hWnd,&rect);
rect.bottom = 20;
COLORREF color=RGB(174,221,129);
pDC->FillSolidRect(rect,color);//使用某种颜色填充客户区上头一拇指粗的长方形区域,不然如果有按钮控件的话,按钮控件周边会被填充屏幕的图像
7 关闭显示屏幕的子窗口就出错! 出现弹窗
一开始无任何头绪,胡乱找原因,乱改,反而改出了其它错误,搞的恶心头疼,后来调试时发现在接收屏幕图像的线程中用到了一个全局变量 BYTE*pData. 它指向的空间在子窗口构造函数中分配 在oncancle中销毁 , 在关闭窗口后,调试窗口跳到了使用pData的一个地方, 发现pData这时候是个野指针。不知道为什么 ,又是一顿狂改。后来猛然发现是因为MFC窗口关闭时,窗口主线程关闭了 但是建立的子线程却没有关闭 所以这个线程还是会运行一会的 而运行的时候需要pData pData所指向的空间已经在窗口销毁的时候释放掉了 所以就出现了错误弹窗 解决方法:判断pData是否为NULL 如果是则退出此线程
感悟: 如果释放了某个空间后 ,一定要将这个指针设置为NULL 而不是不管它 设置为NULL后就可以更加容易的找到错误了!
8 error LNK2001: 无法解析的外部符号 "public: static char * ConnectInfo::ipAddress" (?ipAddress@ConnectInfo@@2PADA)
原因: 好久没有使用c++了 忘记了c++中的静态变量(大部分)是需要在外部进行初始化的 否则会出现这种信息!