我有一个奇怪的行为:当我从我的线程返回0时,WaitForSingleObject似乎崩溃,但如果我调用“ExitThread(0)”,那么它就不会。
void waitForThread(DWORD &threadId)
{
HANDLE hThread = OpenThread(SYNCHRONIZE,
FALSE,
threadId);
if (hThread == NULL) return;
WaitForSingleObject(hThread, INFINITE); // Crashes here (not even returning)
CloseHandle(hThread);
}
根据文件:
ExitThread是退出C代码中线程的首选方法。但是,在C ++代码中,在调用任何析构函数或执行任何其他自动清理之前退出该线程。因此,在C ++代码中,您应该从线程函数返回。
这对我没有意义。我认为我的函数中的“返回0”带有签名:
DWORD WINAPI foo(LPVOID arg);
没关系。为了完整性,使用CreateThread创建线程,如下所示:
DWORD threadId;
HANDLE pth = CreateThread(NULL, // Default security attributes
0, // Default stack size
foo, // Thread name
arg, // Argument to thread
0, // Default creation flag
&threadId); // Returns thread ID
有谁知道为什么return语句会崩溃“WaitForSingleObject”吗?我在WaitForSingleObject之前和之后放置了print语句,并且在线程存在时放置了一个,我看到的行为是:“在WaitForSingleObject之前”,“Thread finish”,Crash。有人理解这种行为吗?