2011-08-16 15 views
14

¿Alguien tiene un ejemplo de cómo usar más fácilmente boost :: condition :: timed_wait? Hay algunos temas sobre el tema here, here y here, pero ninguno tiene un ejemplo de trabajo. Y el doc boost es, como de costumbre, bastante escaso.Ejemplo de uso de boost :: condición :: timed_wait

+0

Esto parece bien documentado en el impulso y una espera temporizada en una variable de condición es muy común en un entorno multiproceso. ¿En qué específicamente buscas ayuda? – Chad

+4

@Chad: ¿Tal vez me haya perdido el documento? Todo lo que encontré fue [aquí] (http://www.boost.org/doc/libs/1_47_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref). Eso solo contiene una muestra no cronometrada, a saber 'while (! Data_ready) {cond.wait (lock); } ' Para el tiempo, solo dice _La sobrecarga de duración de timed_wait es difícil de usar correctamente. La sobrecarga que toma un predicado debe ser preferida en la mayoría de los casos. Sin embargo, no entiendo eso ni este fragmento: 'while (! Pred()) {if (! Timed_wait (lock, abs_time)) {return pred(); }} return true; '¿Qué se supone que sea pred()? – Cookie

Respuesta

19

En realidad, finalmente encontré un enlace con el ejemplo completo here. Con un poco de adaptación, esta parece ser la llamada.

boost::system_time const timeout=boost::get_system_time()+ boost::posix_time::milliseconds(35000); 
boost::mutex::scoped_lock lock(the_mutex); 
if(the_condition_variable.timed_wait(lock,timeout,&CondFulfilled)) 
{ 
    <cond fulfilled code> 
} 
else 
{ 
    <timeout code> 
} 
bool CondFulfilled() { ... } 
Cuestiones relacionadas