Windows: WaitForSingleObject падает, когда поток возвращает 0

У меня странное поведение: WaitForSingleObject кажется сбой, когда я возвращаю 0 из моего потока, но если я вызываю "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", пожалуйста? Я поместил оператор print до и после WaitForSingleObject, и один, когда поток существует, и я вижу следующее поведение: "До WaitForSingleObject", "Завершение потока", Crash. Кто-нибудь понимает это поведение, пожалуйста?

0 ответов

Другие вопросы по тегам