线程无法接收手工信号的有关问题
线程无法接收手工信号的问题
现有以下代码,g_Event, g_Thread 都是全局变量,想用自定义的A类对象的Start() 来创建myThread线程,然后用 End() 来发出线程终止信号让 myThread 退出返回。编译后程序虽然未报错,线程内的程序也正确执行了,但最终发现 myThread 根本收不到 SetEvent(g_Event) 这个信号,线程无法退出。
我是个新手,请高人看看是哪里写错了。谢谢!
HANDLE g_Even = NULL;
HANDLE g_Thread = NULL;
class myClass A;
unsigned int __stdcall myThread(void *param)
{
while(WaitForSingleObject(g_Event, 500) != WAIT_OBJECT_0)
{
...........
}
.................
return 0;
}
A::Start()
{
g_Event = CreateEvent(NULL, TRUE, FALSE, NULL); // g_Event 初始化为 “无信号”,且需要手工重置信号
g_Thread = _beginthreadex(....., myThread, ....);
}
A::End()
{
SetEvent(g_Event);
WaitForSingleObject(g_Thread, INFINITE);
CloseHandle(g_Thread);
}
------解决思路----------------------
GetLastError() 查看错误代码
------解决思路----------------------
把CreateEvent(NULL, TRUE, FALSE, NULL); 放在初始化函数中,不要放在Start中
现有以下代码,g_Event, g_Thread 都是全局变量,想用自定义的A类对象的Start() 来创建myThread线程,然后用 End() 来发出线程终止信号让 myThread 退出返回。编译后程序虽然未报错,线程内的程序也正确执行了,但最终发现 myThread 根本收不到 SetEvent(g_Event) 这个信号,线程无法退出。
我是个新手,请高人看看是哪里写错了。谢谢!
HANDLE g_Even = NULL;
HANDLE g_Thread = NULL;
class myClass A;
unsigned int __stdcall myThread(void *param)
{
while(WaitForSingleObject(g_Event, 500) != WAIT_OBJECT_0)
{
...........
}
.................
return 0;
}
A::Start()
{
g_Event = CreateEvent(NULL, TRUE, FALSE, NULL); // g_Event 初始化为 “无信号”,且需要手工重置信号
g_Thread = _beginthreadex(....., myThread, ....);
}
A::End()
{
SetEvent(g_Event);
WaitForSingleObject(g_Thread, INFINITE);
CloseHandle(g_Thread);
}
------解决思路----------------------
GetLastError() 查看错误代码
------解决思路----------------------
把CreateEvent(NULL, TRUE, FALSE, NULL); 放在初始化函数中,不要放在Start中