当我宣布一个手柄
时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
你同意这个吗?
答案 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 *操作等待线程结束。您的代码创建事件句柄,而不是线程。