我有两个功能:
Fl_Thread n_create_thread(Fl_Thread &t, void *(*f) (void *), void *p)
{
return t = (Fl_Thread)_beginthread((void(__cdecl *)(void *))f, 0, p);
}
void n_wait_end_thread(Fl_Thread t)
{
WaitForSingleObject((HANDLE)t, INFINITE);
}
创建线程,给出线程函数的指针,但如果我等待WaitForSingleObject终止线程,它会挂起并且不能停止等待。
答案 0 :(得分:1)
等待时,您的线程句柄可能无效 - 请改为使用_beginthreadex
- see the MSDN page:
使用_beginthreadex比使用_beginthread更安全。如果线程 由_beginthread生成的快速退出,即句柄 返回给_beginthread的调用者可能无效或指向 另一个线程。但是,_beginthreadex返回的句柄 必须由_beginthreadex的调用者关闭,所以它是有保证的 如果_beginthreadex没有返回错误,则为有效句柄。