【问题标题】:stopping a thread in windows [closed]在Windows中停止线程[关闭]
【发布时间】:2012-05-31 06:50:28
【问题描述】:

我使用 C 在 windows 中创建了一个线程:

hookThreadHandle = CreateThread(NULL, 0, lpStartAddress, NULL, 0, &hookThreadId);

【问题讨论】:

  • 你应该明确你想要什么(这不是一个真正的问题,是吗?),因为“停止”线程可能是指 suspending 它与 terminating 它(Luchian Grigore 在下面的答案中假设后者)。还不清楚您要在哪种情况下执行此操作。除非有充分的理由,否则您通常不会想要终止或暂停线程。通常,当您不想让线程工作时,您会阻塞或休眠,并在您希望线程结束时从线程的入口函数返回。其他一切都是不愉快和冒险的。
  • 有什么问题吗?我会投票赞成关闭。

标签: c++ c windows multithreading winapi


【解决方案1】:

使用TerminateThread 函数。

您发布的功能是:

  PostThreadMessage(hookThreadId, WM_QUIT, (WPARAM) NULL, (LPARAM) NULL);
  WaitForSingleObject(hookThreadHandle, 5000);

所以它向那个线程发送一个退出消息,然后等待它关闭。

【讨论】:

  • function here 如何停止本机线程?
  • @program-o-steve 查看编辑后的帖子。
  • 这两种方法有什么区别?
  • @program-o-steve 你试过谷歌吗?
  • TerminateThread 可能应该重命名为IntroduceHardestToFindBugsImaginableAreYouMadToUseThis() - 我认为他们选择了第一个,因为它略短:)
【解决方案2】:

如果你想关闭线程,你可以使用 TerminateThread(),如果你只想暂停它,你可以使用 SuspendThread() (恢复使用ResumeThread())

【讨论】:

  • 请注意,TerminateThread 可能会泄漏内存并使共享数据和同步对象处于不一致或未定义的状态。 TerminateThread 和 SuspendThread 都可能导致死锁。你真的真的真的不想使用这些功能,除非有非常紧急的原因。
猜你喜欢
  • 2020-05-29
  • 1970-01-01
  • 2011-04-30
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多