gpt4 book ai didi

C++:SIGINT后继续执行

转载 作者:可可西里 更新时间:2023-11-01 14:43:16 26 4
gpt4 key购买 nike

好的,我正在编写一个正在执行大量分析的程序,我希望能够快速停止它。

我在 main 的开头添加了 signal(SIGINT, terminate); 并定义了 terminate 如下:

void terminate(int param){
cout << endl << endl << "Exit [N]ow, or [A]fter this url?" << endl;
std::string answer;
cin >> answer;
if(answer[0] == 'n' || answer[0] == 'N'){
terminateParser();
exit(1);
}else if(answer[0] == 'a' || answer[0] == 'A'){
quitAfterUrl = true;
}
}

在 Linux 中,这按我预期的方式工作,即等待用户输入。但是当我尝试在 Windows 中执行相同操作时,它会显示消息并退出。

有什么方法可以阻止 SIGINT 立即关闭程序吗?

更新:

当我尝试过

BOOL WINAPI handler(DWORD dwCtrlType)
{
if (CTRL_C_EVENT == dwCtrlType)
{
// ask the user
}
return FALSE;
}

正如 Gregory 所建议的,该程序仍然毫不客气地退出而没有停止等待用户输入。

更新 2:我不确定是什么造成的,但代码现在正在运行。谢谢大家的帮助。

最佳答案

From MSDN:

Note SIGINT is not supported for any Win32 application, including Windows 98/Me and Windows NT/2000/XP. When a CTRL+C interrupt occurs, Win32 operating systems generate a new thread to specifically handle that interrupt. This can cause a single-thread application such as UNIX, to become multithreaded, resulting in unexpected behavior.

这意味着您将必须使用预处理指令并实现 Windows specific solution .

BOOL WINAPI handler(DWORD dwCtrlType)
{
if (CTRL_C_EVENT == dwCtrlType)
{
// ask the user
}
return FALSE;
}

并且在 main 的开始

SetConsoleCtrlHandler(handler, TRUE);

关于C++:SIGINT后继续执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com