我添加了一个基于boost server3 example的监控服务器。我有一个正在运行的并行服务。如果并行服务中发生某些异常,我想停止服务器(或更改其输出代码)。这可能吗?
我在main函数中有以下代码:
boost::asio::io_service io_service;
// ...
// Register signal handlers so that the daemon may be shut down. You may
// also want to register for other signals, such as SIGHUP to trigger a
// re-read of a configuration file.
boost::asio::signal_set signals(io_service, SIGINT, SIGTERM);
signals.async_wait(boost::bind(&boost::asio::io_service::stop, &io_service));
http::server::Server s("localhost", "5000");
boost::thread t(boost::bind(&http::server::Server::run, &s));
boost::thread t2(boost::bind(&boost::asio::io_service::run, &io_service));
// Restore previous signals.
pthread_sigmask(SIG_SETMASK, &old_mask, 0);
// Wait for signal indicating time to shut down.
sigset_t wait_mask;
sigemptyset(&wait_mask);
sigaddset(&wait_mask, SIGINT);
sigaddset(&wait_mask, SIGQUIT);
sigaddset(&wait_mask, SIGTERM);
pthread_sigmask(SIG_BLOCK, &wait_mask, 0);
int sig = 0;
sigwait(&wait_mask, &sig);
// Stop the server.
s.stop();
io_service.stop();
t.join();
t2.join();
这是一个try catch块。
在io_service中可能会发生一些异常,如果发生了异常,我想更改服务器的输出。我可以那样做吗?怎么样?
我想到了异常处理:引发某个异常,如果发生,将停止应用程序。这是要走的路,还是有另一种最佳做法?
如果您认为我在主要方面做错了,请纠正我。