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. Кто-нибудь понимает это поведение, пожалуйста?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]