【发布时间】:2014-08-14 18:09:23
【问题描述】:
我有两个功能:
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终止线程,它就会挂起并且无法停止等待。
【问题讨论】:
-
你可能想检查 _beginthread 的返回值,看看它是否真的是一个有效的句柄。
-
你确定
f()真的退出了吗? -
还请记住,
_endthread()(在_beginthread()线程终止时调用)关闭线程句柄,因此等待可能失败。 -
顺便说一句,在将
f传递给_beginthread()时,您根本不应该进行类型转换:_beginthread(f, ...);如果因为f是错误的签名而导致编译器失败,那是真正的可能导致真正的运行时问题的错误,因此类型转换只会隐藏它。通常(并非总是)当您必须对某些内容进行类型转换时,您可能做错了什么。 -
顺便说一句,为什么
n_create_thread()同时具有Fl_Thread返回值和Fl_Thread参考参数?参数的目的是什么?它没有被使用。如果它是一个输出参数,你可能应该这样做:t = (Fl_Thread) _beginthread(...); return t;
标签: c multithreading winapi