Как правильно выйти из моей программы? - PullRequest
1 голос
/ 14 ноября 2011

Работая с 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.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Функция main - это всего лишь поток, вы заканчиваете только этот. Однако для завершения процесса все потоки должны быть правильно завершены, иначе он будет работать вечно. Вам нужно сохранить ссылку на потоки и прекратить их, как только вы получите сообщение WM_QUIT.

0 голосов
/ 14 ноября 2011

Выход - выход из всего процесса. Ваш процесс будет очищен при вызове выхода, например, Вызовите функцию, зарегистрированную в atexit, или вызовите деструктор глобального объекта в случае c ++. Как насчет abort () или terminateProcess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...