Хорошо, я пишу программу, которая проводит довольно тяжелый анализ, и я хотел бы иметь возможность быстро ее остановить.C++: Продолжить выполнение после SIGINT
Я добавил signal(SIGINT, 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 это работало как я ожидал, что это, то есть ждали пользовательского ввода. Но когда я пытаюсь сделать то же самое в окнах, он все равно показывает сообщение и выходит.
Есть ли способ остановить SIGINT сразу после закрытия программы?
Update:
, когда я попытался
BOOL WINAPI handler(DWORD dwCtrlType)
{
if (CTRL_C_EVENT == dwCtrlType)
{
// ask the user
}
return FALSE;
}
, как предложил Грегори, программа все еще бесцеремонно возбужденное без остановки для ввода данных пользователем.
Обновление 2: Я не совсем уверен, что это сделал, но код работает сейчас. Спасибо всем за помощь.
Не точно решить ваш вопрос, - но если вы можете (и потому, что вы написали для Linux изначально), вы можете попробовать скомпилировать с помощью GCC на окнах - видимое поведение может напоминать Linux ближе. См. Веб-сайт MinGw. Также - cygwin привносит программирование еще ближе к unix, чем к mingw. – laura
Я делаю это. – zmbush
Вы вызывали 'SetConsoleCtrlHandler (обработчик, TRUE);'? в начале 'main'? –