【发布时间】:2014-02-28 00:50:26
【问题描述】:
我想知道如何处理从 Windows 控制台发出的Ctrl-C。
#include <iostream>
#include <zmq.hpp>
#include <windows.h>
BOOL WINAPI consoleHandler( DWORD dwCtrlType ) {
// what to do here?
return TRUE;
}
int main() {
SetConsoleCtrlHandler( consoleHandler, TRUE );
zmq::context_t context( 1 );
zmq::socket_t socket( context, ZMQ_REP );
socket.bind( "tcp://*:5555" );
while ( true ) {
zmq::message_t request;
try {
socket.recv( &request );
}
catch(zmq::error_t& e) {
std::cout << "zmq error" << std::endl;
}
}
}
这会安装一个处理函数,该函数可以作用于来自控制台的CTRL_C_EVENT。目前,它什么也不做。因此,revc 调用不会失败并抛出异常 as described here (in "Error handling")。
我想做的是break在异常处理程序中执行循环,并让 C++ 绑定的 RAII 功能在退出main() 时进行所需的清理。
【问题讨论】: