Я пытаюсь понять систему потоков 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;
}