我有一个奇怪的行为:当我从我的线程返回 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
有谁知道为什么返回语句会崩溃“WaitForSingleObject”吗?我在 WaitForSingleObject 之前和之后放置了 print 语句,当线程存在时,我看到的行为是:“在 WaitForSingleObject 之前”,“线程完成”,Crash。请问有人理解这种行为吗?