Правильный способ ожидания ввода после обработки sigaction ctrl + c или SIGINT

Эта программа выведет бесконечное «Enter a:» в командную строку после отправки SIGINT через Ctrl + С. Для выхода из этого цикла я использую Ctrl + \. Если я раскомментирую строку, содержащую std::cin.clear();все работает нормально. У меня вопрос, это правильный способ сделать это? Нужно было бы установить std::cin.clear(); перед каждым cin / cout он хочет, чтобы программа ждала. Вот почему это, кажется, не правильный путь для меня.

#include<iostream>
#include<signal.h>

void sig_handler(int s)
{
std::cout << "Cought: " << s << std::endl;
// do something...
}int main ()
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = sig_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
int a=1;
while(a)
{
std::cout << "Enter a:" << std::endl;
//std::cin.clear(); // Uncomment me!
std::cin >> a;
}
}

PS: я знаю, что cout в обработчиках сигналов — плохая идея.

PPS: все отлично работает (без std::cin.clear();) когда я использую старый (не рекомендуется) signal(),

PPPS: Просто чтобы прояснить, я не хочу выходить из программы на Ctrl + С!

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]