永发信息网

MFC 如何判断线程还在执行呢?

答案:2  悬赏:40  手机版
解决时间 2021-04-10 19:44
  • 提问者网友:鐵馬踏冰河
  • 2021-04-10 05:33
是在有点没辙了,又来找你帮忙了!
这是我的工作线程(这个代码直接将刚刚创建的线程关闭了,根本不执行)!
我怎么判断创建了多个线程,关闭前一个呢,再重新创建一个新线程!
for(;;){
DWORD dwRetVal = 0;
dwRetVal = WaitForSingleObject(mThreadInfo.athread_A1,10);
if( dwRetVal != WAIT_TIMEOUT){
DWORD dwExitCode;
GetExitCodeThread( mThreadInfo.pWnd1->m_hWnd, &dwExitCode );
AfxEndThread( dwExitCode, TRUE );

}else{
for(int i=0;i<8;i++){
Animation2(i);
::SendMessage(mThreadInfo.pWnd1->m_hWnd,WM_ANIMATION_MESSAGE,
(WPARAM)(&array_animation),mThreadInfo.flag_list_animation);
Sleep(200);
}
}
}
是要在外部判断?在button相应事件中判断?
感觉越改越乱了!

AfxEndThread()这个退出只能在线程内部调用,在外部判断如何关闭线程呢?用这个函数TerminateThread?好像都不推荐用这个~
还望大神指点一二!
最佳答案
  • 五星知识达人网友:鱼芗
  • 2021-04-10 06:39
首先说,WM_ANIMATION_MESSAGE,这样在工作者线程中发送界面消息是有问题的。这个消息同样被发送到主窗口的消息环中,和按钮响应消息进行排队,逻辑上不合理。几次你的提问,一直没有完整的需求框架描述,这样有点乱。涉及界面重绘显示的线程,通常采用UI线程,不过这个相对复杂了不少。

在线程内部结束是正确的方法,外部终止工作者线程并不合理,可能造成内存泄露或资源耗尽。从上面代码看不到太多信息,除了发现SendMessage操作了主界面,就是你for内部又加了一个for,这样中断也不会立刻发生,延时将近或超过2秒。还有就是WAIT_TIMEOUT的逻辑应该是用反了。

没有理解线程的编程思想,生硬的做代码确实会很乱。线程的东西,从逻辑和框架上都有不同,因为不清楚你的总体设计和逻辑,猜不出太多东西,帮不到太多。
全部回答
  • 1楼网友:往事埋风中
  • 2021-04-10 08:06
1.在线程中加入一个信号,线程启动时信号置位。 2.使用waitforsingleobject函数,监视这个信号,发现线程启动,那么关闭并重启。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯