Работая с C и Win32, у меня возникает проблема, когда моя программа останавливается вместо закрытия при публикации сообщения о выходе (например, Alt-F4), и мне приходится завершать процесс с помощью диспетчера задач.
У меня есть это в моем основном цикле: (проблема решена)
MSG msg;
while(1)
{
while(PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
{
terminate = 1;
while(terminate != 3) //each thread increments "terminate" by 1 before returning
{
Sleep(1);
}
return 0;
}
DispatchMessage(&msg);
}
Sleep(1);
}
Будет напечатано "ОК!" в консоли, а затем заморозить.
Я думаю, это может быть из-за того, что у меня есть несколько потоков, и они не прерываются должным образом (но я прочитал, что если я вернусь из функции main (), остальные потоки должны быть автоматически завершены). Если это помогает, один из этих потоков является потоком рендеринга OpenGL.