我试图了解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;
}