我正在尝试在应用程序中捕获Ctrl-C,如下所示的MWE示例:
#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;
}
}
很遗憾,当我按下Ctrl+C时,handler()
没有被调用。相反地,循环不再等待用户输入,如下所示:
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库以便于移植。
std::cin >>
是一个阻塞操作。此时 io_service 不起作用。 - Galimov Albert