boost signal 에 대해서 질문드립니다.
글쓴이: trymp / 작성시간: 화, 2015/11/10 - 12:34오후
아래와 같이 boost::asio 로 signal 처리를 할 때 handler() 함수가 signal context 영역에 들어가는 건가요?
아니면 io_service 내부에서 signal 마킹만 하고 적당한 시점에 호출하는 것인지 궁금합니다.
아래와 같은 코드에서 signal safe 해야하는지 궁금해서 질문드립니다.
고수님들의 조언 부탁드립니다.
#include <boost/asio.hpp>
#include <boost/asio/signal_set.hpp>
#include <boost/bind.hpp>
#include <boost/atomic.hpp>
#include <iostream>
void handler(boost::asio::signal_set& this_, boost::system::error_code error, int signal_number) {
if (!error) {
static boost::atomic_bool first(true);
if(first) {
// do something like writing data to a file
std::cout << " A signal(SIGINT) occurred." << std::endl;
first = false;
this_.async_wait(boost::bind(handler, boost::ref(this_), _1, _2));
}
else {
std::cout << " A second signal(SIGINT) occurred, exiting...." << std::endl;
exit(1);
}
}
}
int main() {
// Construct a signal set registered for process termination.
boost::asio::io_service io;
boost::asio::signal_set signals(io, SIGINT);
// Start an asynchronous wait for one of the signals to occur.
signals.async_wait(boost::bind(handler, boost::ref(signals), _1, _2));
io.run();
return 2;
}Forums:


댓글 달기