请帮忙看我的代码!

qsfsea 2004-07-22 10:22:19
DWORD dwRId,dwSId,dwIndex;
HANDLE hRecvThread,hSynThread;
hRecvThread = CreateThread(NULL,0,RecvThread,(PVOID)this,0,&dwRId);
if(hRecvThread == NULL)
{
OutputMsg("创建接收线程失败!error = "+IntToStr(GetLastError()));
return;
}

dwIndex = WaitForSingleObject(hRecvThread,8000);
//线程超时
if(dwIndex !=WAIT_OBJECT_0)
{
OutputMsg("接收文件线程运行超时,强制结束!");
TerminateThread(hRecvThread,-1);
CloseHandle(hRecvThread);
return ;
}
CloseHandle(hRecvThread);


为什么线程无法正常执行?

去掉 dwIndex = WaitForSingleObject(hRecvThread,8000); 及其下面的代码就可以了
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lianglp 2004-07-22
  • 打赏
  • 举报
回复
如果主线程处于等待状态时,加一个工作线程如果调用SendMessage()等函数访问主线程,那么这时工作线程就不能执行下去。
楼主上面的可能就是这种情况,是否在工作线程中有一个函数对界面进行了操作???
如果这样的话工作线程就不能继续进行,直到waitfor...函数超时。
flyelf 2004-07-22
  • 打赏
  • 举报
回复
如果这段代码是在主线程中,就会造成这个问题,可以参考http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=197055
Pipi0714 2004-07-22
  • 打赏
  • 举报
回复
dwIndex = WaitForSingleObject(hRecvThread,8000); //这句不对,详细参照msdn中的函数说明:
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object to wait for //他是一个等待对象的句柄,应该是一个事件的句柄,用CreateEvent函数创建的。
DWORD dwMilliseconds // time-out interval in milliseconds
);

另外退出线程最安全的方法线程函数返回。
taianmonkey 2004-07-22
  • 打赏
  • 举报
回复
将WaitForSingleObject(hRecvThread,8000); :
改成:
WaitForSingleObject(hRecvThread,INFINITE);
bager 2004-07-22
  • 打赏
  • 举报
回复
请参考以下链接所提及的内容。
http://community.csdn.net/Expert/topic/3177/3177913.xml?temp=.5829584
qsfsea 2004-07-22
  • 打赏
  • 举报
回复
感谢各位,这些代码原来在主线程中,我把它们放到另一个线程中,ok了

15,471

社区成员

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

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