Я пытаюсь поймать Ctrl-C на в приложении, как показано в следующем MWEИспользование повысить ASIO поймать Ctrl-C
#include <boost/asio/signal_set.hpp>
#include <iostream>
void handler(const boost::system::error_code& error , int signal_number)
{
std::cout << "handling signal " << signal_number << std::endl;
}
int main(int argc , char** argv)
{
boost::asio::io_service io_service;
// Construct a signal set registered for process termination.
boost::asio::signal_set signals(io_service, SIGINT);
// Start an asynchronous wait for one of the signals to occur.
signals.async_wait(handler);
char choice;
while(true)
{
std::cout << "Press a key: " << std::endl;
std::cin >> choice;
}
}
К сожалению handler()
не вызывается при нажатии Ctrl +C. не наоборот цикл больше не ожидает ввода пользователя, как показано ниже:
c:\tmp>CtrlC.exe
Press a key:
d
Press a key:
e
Press a key:
Press a key:
Press a key:
Press a key:
Press a key:
Press a key:
Press a key:
Press a key:
Press a key:
Если это имеет значение, я на Windows, и я знаю, что есть Windows, специфический способ поймать Ctrl + C но я хотел бы использовать boost, если это возможно, для удобства переноса.
Вашего 'станд :: CIN >>' является блокирующей операцией. В настоящий момент io_service не работает. – PSIAlt