2009-12-29 24 views
12

estoy trabajando actualmente en una pequeña clase de contenedor para el hilo impulso pero yo realmente no entiendo cómo funciona la función de reposo, esto es lo que tengo hasta ahora:¿Qué significa boost :: thread sleep() do?

BaseThread::BaseThread(){ 
    thread = boost::thread(); 
    bIsActive = true; 
} 

BaseThread::~BaseThread(){ 
    join(); 
} 

void BaseThread::join(){ 
    thread.join(); 
} 

void BaseThread::sleep(uint32 _msecs){ 
    if(bIsActive) 
     boost::this_thread::sleep(boost::posix_time::milliseconds(_msecs)); 
} 

Así es como he implementado hasta ahora, pero Realmente no entiendo cómo el método estático this_thread :: sleep sabe qué hilo dormir si, por ejemplo, varias instancias de mi contenedor de hilos están activas. ¿Es esta la manera correcta de implementarlo?

Respuesta

17

boost::this_thread::sleep dormirá el hilo actual. Solo el hilo en sí puede dormir. Si desea hacer que un hilo duerma, agregue un código de verificación en el hilo o use interruptions.

ACTUALIZACIÓN: si utiliza un compilador C++ 11 con la biblioteca estándar actualizada, tendrá acceso a las funciones std::this_thread::sleep_for y std::this_thread::sleep_until. Sin embargo, no hay un mecanismo de interrupción estándar.

+0

código de verificación como qué? interrupciones parece ser una buena manera también. – user240137

+0

Lo que quiero decir con "código de verificación" es que en el código ejecutado por el hilo dado, en algún lugar hay un 'si' que verifica si necesita dormir y lo hace si es necesario. Por ejemplo, si su hilo ejecuta una función con un gran bucle, puede ser suficiente comprobar si necesita dormir (comprobando un booleano establecido por su código actual, por ejemplo) en cada extremo de la iteración del bucle. Pero en tu caso no quieres ser intrusivo con el código de tu hilo, así que las interrupciones parecen una mejor alternativa. – Klaim

2

sleep siempre afecta al hilo actual (el que llama al método).

Cuestiones relacionadas