2010-02-13 3 views
1

최대 1 초 동안 상태를 기다리고 싶습니다.어떻게하면 boost :: condition :: timed_wait을 컴파일 할 수 있습니까?

boost::posix_time::time_duration td = boost::posix_time::milliseconds(50); 
readerThread_cond_.timed_wait(lock, boost::bind(&XXXX::writeCondIsMet, this), td); 

하지만 오류 얻을 : 나는 TIME_DURATION를 전달하려고 한 나는 또한 xtime 통과 시도했습니다

/usr/include/boost/thread/pthread/condition_variable.hpp:156: error: no match for ‘operator+’ in ‘boost::get_system_time() + wait_duration’

:

boost::xtime t; 
boost::xtime_get(&t, boost::TIME_UTC); 
readerThread_cond_.timed_wait(lock, boost::bind(&XXXX::writeCondIsMet, this), td); 

을하지만 난이 오류가 발생합니다 :

libboost_thread 및 libboost_date_time과 연결되어 있고 코드가 컴파일되고 실행 대기 만 사용하면 ok가 실행되지만 부울 헤더 파일에서 템플릿을 해결하는 것과 관련된 것 같은 오류 메시지가 표시됩니다. 내가 옳은 길을지나 가지 않는다고 말하는 것 같지만, 나는 그것을 이해하지 못합니다.

답변

1

나는 그것이 논쟁의 순서라고 생각한다.

timed_wait에 관한 문제가 전혀 없었으므로, the boost reference to boost.thread, condition_variable_any, timed_wait에서 일부 세부 사항을 살펴 보았습니다. 내가 가장 흥미있는 것은 이것이다 :

template<typename lock_type,typename duration_type,typename predicate_type> 
bool timed_wait(lock_type& lock,duration_type const& rel_time,predicate_type predicate); 

시간-기간은 실제로 두 번째 인수가 아닌 세 번째입니다.

[편집] 실제로, 당신이 상태가 신호를 받았는지 또는 시간 초과가 발생했는지 알 수 없으므로 timed_wait의 반환 값을 확인해야합니다. timed_wait 시간 초과로 인해 발생하지 않습니다! [편집]

+0

저는 실제로 1 분 전에 그것을 알아 냈습니다 만, 당신은 신용을 얻습니다. 고맙습니다 –

관련 문제