如何正确退出我的程序?

时间:2011-11-13 23:56:00

标签: c winapi

使用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);
}

它会打印“OK!”在控制台中然后冻结。

我认为这可能是因为我有多个线程并且它们没有正确终止(但我读到如果我从main()函数返回,则其他线程应该被自动终止)。如果它有助于其中一个线程是一个OpenGL渲染线程。

2 个答案:

答案 0 :(得分:1)

main函数只是一个线程,你只是终止那个。但是,对于要结束的进程,所有线程都需要正确终止,否则它将永远运行。您需要保留对线程的引用,并在收到WM_QUIT消息后终止它们。

答案 1 :(得分:0)

退出是退出整个过程。当您致电退出时,您的流程将会清理,例如调用用atexit注册的函数,或者在c ++的情况下调用全局对象的析构函数。那么abort()或terminateProcess。