mfc socket线程卡死主线程?

UpCoderXH 2016-03-11 01:03:14
hThread = ::CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadFunc, NULL, 0, &ThreadID);

DWORD Try1Dlg::ThreadFunc(LPVOID lpParam)
{
while (true)
{
string res = player.getServerSoctet().recvSingleOption();
if (MainFunction::startwith(res,"Error")==false)
{
string inviteName = "";
if (res[0] == 'i')
{
::MessageBox(NULL,(LPCTSTR)function.UTF8ToUnicode(res).c_str(), _T("Notice"), MB_OK);
}
break;
}
}

return 0;
}

我在socket线程里面不停的接收消息,还是把主线程卡死了,最后换成异步通信就解决了。。求问大神,这个socket线程为什么会卡死主线程?
...全文
434 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
danscort2000 2016-03-14
  • 打赏
  • 举报
回复
你在后台线程里调用MessageBox前台界面操作? 你用CreateThread创建线程? ...... 不知道说什么好
ArthurKingYs 2016-03-11
  • 打赏
  • 举报
回复
使用socket模型比较好 http://blog.csdn.net/u011001084/article/details/50853734
xiaohuh421 2016-03-11
  • 打赏
  • 举报
回复
卡死的时候, 点击调试中的全部中断, 然后就知道是哪里的代码卡死了线程. 打印日志信息, 不要使用MessageBox. 最好使用OutputDebugString函数来输出信息, 然后调试的时候, 在VS或者VC的输出窗口就可以看到, 运行的时候, 需要一个软件叫:DebugView中可以看到. 你要确定是线程中哪个代码卡死了. 如果子线程会卡死主线程, 多半是有同步机制导致. 比如SendMessage等等.
孤客天涯 2016-03-11
  • 打赏
  • 举报
回复
线程一般不会把主线程卡死的,你player.getServerSoctet().recvSingleOption();做了些什么?
笨笨仔 2016-03-11
  • 打赏
  • 举报
回复
使用事件触发机制编写程序,不但能提高计算机的效率,也不会出现类的死循环引发的卡死。
encoderlee 2016-03-11
  • 打赏
  • 举报
回复
在哪个线程中创建的CSocket对象就只能在哪个线程中使用,需要跨线程传递CSocket对象的话需要先Detach再Attach

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧