加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 如何杀死一个MFC线程?

发布时间:2020-12-14 05:40:06 所属栏目:Java 来源:网络整理
导读:我使用AfxBeginThread生成一个线程,这是一个无限的while循环: UINT CMyClass::ThreadProc( LPVOID param ){ while (TRUE) { // do stuff } return 1;} 我如何在我的类析构函数中杀死这个线程? 我想像 UINT CMyClass::ThreadProc( LPVOID param ){ while (m
我使用AfxBeginThread生成一个线程,这是一个无限的while循环:
UINT CMyClass::ThreadProc( LPVOID param )
{
  while (TRUE)
  {
      // do stuff
  }
  return 1;
}

我如何在我的类析构函数中杀死这个线程?

我想像

UINT CMyClass::ThreadProc( LPVOID param )
{
  while (m_bKillThread)
  {
      // do stuff
  }
  return 1;
}

然后在析构函数中将m_bKillThread设置为FALSE.但是我仍然需要在析构函数中等待直到线程死亡.

解决方法

积极杀死线程:

使用AfxBeginThread(CWinThread *)的返回值来获取线程句柄(m_hThread),然后将该句柄传递给TerminateThread Win32 API.这不是终止线程的安全方法,所以请继续阅读.

等待线程完成:

使用AfxBeginThread(CWinThread *)的返回值获取成员m_hThread,然后使用WaitForSingleObject(p-> m_hThread,INFINITE);如果此函数返回WAIT_OBJECT_0,则线程完成.而不是INFINITE,您也可以在超时发生之前等待毫秒数.在这种情况下WAIT_TIMEOUT将被返回.

信号到你的线程,它应该结束:

在做WaitForSingleObject之前,只需设置线程应该退出的某种标志.然后在你线程的主循环中,您将检查该bool值并打破无限循环.在你的析构函数中,你将设置这个标志,然后做一个WaitForSingleObject.

更好的方法:

如果你需要更多的控制,你可以使用像boost conditions这样的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读