데이터 소스가 주어진 시간 내에 액세스되었는지 확인하고 그렇지 않은 경우 연결을 지우는 간단한 폴링 스레드 (Boost 1.39.0 사용)가 있습니다. 관련 코드는 아래에서 검토 할 수 있습니다.순수 폴링 구현에서 부스트 인터럽트
내 관심은 두 가지이다 :
1) 안전하게 스레드를 폐쇄하는 것이 적절 수면에 인터럽트를 사용? 인터럽트가 잠자기가 끝날 때까지 기다릴 것인가, 아니면 즉시 중단 할 것인가? while 루프를 벗어나기 위해 thread_interrupted 예외를 잡는 것을 볼 수 있습니다.
2) 대부분의 시간을 낭비하는 쓰레기를 낭비하고 있습니까? 표준 C++에서 간단한 폴링 메커니즘을 구현하는 더 좋은 패턴이 있습니까?
boost::xtime xt;
while (1) {
try {
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += _sleep_secs;
boost::thread::sleep(xt);
//
// logic to check resource access
// etc.
}
catch(boost::thread_interrupted const&) {
return;
}
}
감사에서, 나는 그것을 내 dev environemnt를 실행 봤는데이 예상대로 작동하는 것 같다. 그래도 스레딩을 제대로 이해하려면 시간을 할애해야합니다. – Michael