检查线程是否正在运行

时间:2011-02-17 15:34:28

标签: c windows multithreading winapi

当我宣布一个手柄

HANDLE hThread;

我检查线程是否正在运行,

  if (WaitForSingleObject(hThread, 0) == WAIT_OBJECT)
  {
       //Thread is not running.
  }
  else
  {
       hThread = CreateThread(......)
  }

但它第一次失败,检查线程是否正在运行。怎么做到呢?我认为我唯一需要的是以某种方式将hThread设置为信号状态。

修改

我找到了类似的东西

hThread = CreateEvent(0, 0, 1, 0); //sets to handle to signaled

你同意这个吗?

3 个答案:

答案 0 :(得分:4)

看起来您实际上并不想测试线程是否已完成,而是想知道它是否已经启动。您通常会按如下方式执行此操作:

HANDLE hThread = NULL;//do this during initialization
...
if (!hThread)
   hThread = CreateThread(......);

一旦您知道它已经开始(hThread而非NULL),那么您可以使用您已经知道的WaitForSingleObject方法或{{3}来测试它是否已经完成}}

答案 1 :(得分:2)

您的线程句柄未初始化。您不能在垃圾句柄上使用WaitForSingleObject()。您是否试图告诉先前创建的线程的状态,如果它已经死亡则重新启动它?然后你需要跟踪第一个线程句柄。

答案 2 :(得分:1)

可能你的意思是GetExitCodeThread

编辑。

hThread = CreateEvent(0, 0, 1, 0); //sets to handle to signaled

线程完成后,线程句柄会发出信号。这允许使用Wait *操作等待线程结束。您的代码创建事件句柄,而不是线程。