我在主线程里面建立了socket连接。
在某一个页码里面加入了接收函数。如果不打开这个页码在主线程的析构函数里面closesocket(theApp.m_Socket[1].socketTmp);
发现不管用。开了这个页面才行,是什么原因?DWORD WINAPI COutList::thread(LPVOID lpParameter)
{
HWND hwnd = ((RECVPARAM*)lpParameter)->hwnd;
COutList* pdlg = ((RECVPARAM*)lpParameter)->pdlg;
int s = 1;
char buff[100];
while(s != SOCKET_ERROR)
{
//调用recv函数接收数据
s = recv(theApp.m_Socket[1].socketTmp,buff,100,0);
if (s != SOCKET_ERROR )
{
pdlg->Parse_Code(buff,1);
}
}
//发送断开命令
//send(theApp.m_Socket[1].socketTmp,"连接断开",100,0);
//closesocket(theApp.m_Socket[1].socketTmp);
delete lpParameter; //释放
return NULL;
}
在某一个页码里面加入了接收函数。如果不打开这个页码在主线程的析构函数里面closesocket(theApp.m_Socket[1].socketTmp);
发现不管用。开了这个页面才行,是什么原因?DWORD WINAPI COutList::thread(LPVOID lpParameter)
{
HWND hwnd = ((RECVPARAM*)lpParameter)->hwnd;
COutList* pdlg = ((RECVPARAM*)lpParameter)->pdlg;
int s = 1;
char buff[100];
while(s != SOCKET_ERROR)
{
//调用recv函数接收数据
s = recv(theApp.m_Socket[1].socketTmp,buff,100,0);
if (s != SOCKET_ERROR )
{
pdlg->Parse_Code(buff,1);
}
}
//发送断开命令
//send(theApp.m_Socket[1].socketTmp,"连接断开",100,0);
//closesocket(theApp.m_Socket[1].socketTmp);
delete lpParameter; //释放
return NULL;
}
解决方案 »
- VS2003创建的程序,为什么在Win7上运行的时候会更改系统当前的配色方案
- 项目归档,但有个问题。
- 如何把后添加的对话框最小化到任务栏(注:不是托盘,是任务栏.)
- 关于网上购买的支付方式,如网银购买,手机方式购买,怎么做? 手机购买 (支持中国移动和中国联通手机) 网上银行卡购买(支持全国各类银行卡:方便安全)
- 简单的日期转换函数……
- VC如何获取网页中文本输入框中的内容
- 如何查找CListCtrl中的特定列?
- 网络测试不稳地?debug下还可以,但是release却不行,大家给点意见~~
- 如何迅速选中RichEditCtrl的第N行,并将光标停在行首?
- 关于property sheet 和tab control的问题
- 1.现在有一个窗体,我想让这个窗体的行为类似Menu,即失去焦点或者鼠标点击别的地方就关闭。如何??2.如何让子窗体显示在父窗体外面?
- 求一例子:在基于对话框的程序主界面上加入一属性页(WTL),谢谢!
主线程的析构函数 是指应用程序退出吗?
应用程序退出会自动closesocket,加不加意义不大,发现不管用。是什么意思?是指对方收不到FD_Close吗?如果这样考虑加心跳包试试我也没遇过LZ说的问题,以上是我的猜测,听楼下详解...
??
这样在类内定义线程?
否则会出现不知名的错误。、、
推荐使用postmessage函数来邮寄消息到指定窗口
1.不明白你为什么取hwnd的值,整篇没看见你用。
2.为什么你在线程退出时把窗口也析构了。如果你在这里析构窗口,那么与窗口有关的变量都被析构了。而我们开线程一般是不析构窗口的,除非这就是你的主线程,在说了,MFC里面你是看不到主窗口线程代码的。越想越迷糊。
3.总之你的程序很乱,编程要力求简洁2字。不该出现的代码就不要写。