Windows:当线程返回0时,WaitForSingleObject崩溃

时间:2013-07-03 03:06:57

标签: c++ windows waitforsingleobject

我有一个奇怪的行为:当我从我的线程返回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。有人理解这种行为吗?

0 个答案:

没有答案