怎么在线程外终止一个线程

zhang_tiger 2003-03-06 10:04:49
LPDWORD exitcode1=NULL;
UINT ExitCodeThread;
if(GetExitCodeThread(pThread[i]->m_hThread,exitcode1)==0)
//以上这条语句返回0,为什么不能获得exitcode1呢?
{
MessageBox("不能获得ExitCode!");
return;
}
ExitCodeThread=*exitcode1;
AfxEndThread(ExitCodeThread,TRUE);
m_MsgList.DeleteString(m_MsgList.GetCurSel());
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
arxing 2003-03-07
  • 打赏
  • 举报
回复
MFC线程一般有个消息队列循环,你可以用::PostThreadMessage(hThread, WM_QUIT, 0, 0),退出线程。也可以用Event, Mutex等等。
ExitThread, _endthreadex,AfxEndThread等等都是退出当前线程。不能对别的线程操作,一旦执行ExitThread,类似于函数的return,立即退出线程,而不会执行线程的任何释放工作(这跟return的特点就不一样了)。因此,CRT包装了一个_endthreadex/_endthread,MFC有个AfxEndThread,以便安全释放线程初始化的一些资源。
icelight 2003-03-07
  • 打赏
  • 举报
回复
错了。应该这样用:

DWORD nCode;
GetExitCodeThread(pThread[i]->m_hThread,&nCode);

GetExitCodeThread()的返回值只是表示函数执行成功与否,与线程退出值无关。
线程退出码保存在nCode。
若nCode等于STILL_ACTIVE表示线程还没结束。

强行终止线程用TerminateThread(),微软不建议使用它。
icelight 2003-03-07
  • 打赏
  • 举报
回复
嗯。
aben456 2003-03-07
  • 打赏
  • 举报
回复
做一个信号量
当线程在内部检测到信号量有改动时,自动退出
CMutex类来实现

互斥操作参考
http://expert.csdn.net/Expert/topic/1151/1151922.xml?temp=.9171564

15,471

社区成员

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

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