我有这样的事情:
DWORD WINAPI test(LPVOID lpParam) {
while (1) {
/*DO STUFF*/
}
}
int main() {
...
hThread = CreateThread(NULL,0,test,NULL,0,&dwThreadId);
...
}
Run Code Online (Sandbox Code Playgroud)
如何在没有TerminateThread()的情况下关闭线程?我的第一个想法是创建一个全局变量(shouldshutdown = 0/1),当Thread应该关闭时将它设置在main()中.然后在Thread中调用ExitThread().因此,我必须在线程的while循环中检查此变量,这是我猜的坏样式.
Sea*_*ean 11
您可以检查线程是否需要停止的事件.例如(没有错误处理):
DWORD WINAPI test(LPVOID lpParam)
{
HANDLE hEvent = (HANDLE)lpParam
while (WaitForSingleObject(hEvent, 0) == WAIT_TIMEOUT)
{
/*DO STUFF*/
}
}
int main() {
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)
hThread = CreateThread(NULL,0,test,(LPVOID)hEvent,0,&dwThreadId);
// Do
// Stuff
// Tell the thread to exit
SetEvent(hEvent)
// Wait for the thread to exit
WaitForSingleObject(hThread, INFINITE);
}
Run Code Online (Sandbox Code Playgroud)
一般模式是为线程提供某种可警告的对象,它可以监视它和其他东西可以设置.在这种情况下,我使用了手动重置事件.该while循环检查,看看是否该事件已发出信号,如果没有它的东西.当它被发出信号时,WaitForSingleObject它将返回WAIT_OBJECT_0并且循环将退出并且你将脱离线程函数.
在主函数中,在发出事件信号之后需要做的就是等待线程退出.