Как реализовать «Quit Y, N» при нажатии кнопки закрытия - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь понять систему потоков 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...