如何在按下关闭按钮时实现“ Quit Y,N”

时间:2019-04-01 14:24:27

标签: c multithreading winapi

我试图了解Windows线程系统,但是最近遇到了一个问题,我无法完全理解:

我希望控制台不要在按下“关闭”按钮时关闭,而是问您是否应该关闭。现在所有的东西都在Thread()函数中运行,该函数仅检查全局static volatile bool bActive == false是否是线程刚结束。但我希望它会写一些消息,如果不是,则可以继续正常工作。

我已经尝试过了:

// in console creation function
SetConsoleCtrlHandler((PHANDLER_ROUTINE)CloseHandler, TRUE);

static bool CloseHandler(DWORD event)
{
    if (event == CTRL_CLOSE_EVENT)
    {
printf("close event");
        if(bActive)
        { 
            InterlockedDecrement(&bActive);
            WaitForSingleObject(hThread, INFINITE); // just wait for thread to finish or restart
        }
    }
    return true;
}

,但是无论应用程序必须提供什么选择,它都会关闭该应用程序。

这是其余的代码:

DWORD _stdcall VGameThread(void* _self)
{

    while (bActive)
    {
        while (bActive)
        {
// do its things
        }
        if (on())
            break;
        else
            InterlockedIncrement(&bActive);
    }
}
on()
{

    int i;
    scanf("%d", &i);
    if (i == 1)
        return 1;
    else
        return 0;
}

0 个答案:

没有答案