2009-12-29 4 views
12

ich zur Zeit auf einer kleine Wrapper-Klasse arbeitete für Boost-Thread, aber ich nicht wirklich bekommen, wie die Sleep-Funktion funktioniert, das ist, was ich bisher bekommen habe:Was macht boost :: thread sleep()?

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)); 
} 

Dies ist, wie ich es so weit umgesetzt, aber Ich verstehe nicht wirklich, wie die statische this_thread :: sleep-Methode weiß, welcher Thread zu schlafen ist, wenn zum Beispiel mehrere Instanzen meines Thread-Wrappers aktiv sind. Ist dies der richtige Weg, um es zu implementieren?

Antwort

17

boost::this_thread::sleep wird der aktuelle Thread schlafen. Nur der Thread selbst kann schlafen gehen. Wenn Sie einen Thread in den Ruhezustand versetzen möchten, fügen Sie einen Prüfcode im Thread oder use interruptions hinzu.

UPDATE: Wenn Sie einen C++ 11 Compiler mit der aktuellen Standardbibliothek verwenden, haben Sie Zugriff auf die Funktionen std::this_thread::sleep_for und std::this_thread::sleep_until. Es gibt jedoch keinen Standard-Unterbrechungsmechanismus.

+0

Prüfcode wie was? Unterbrechungen scheinen auch ein guter Weg zu sein. – user240137

+0

Was ich mit "check code" meine, ist, dass in dem Code, der von dem gegebenen Thread ausgeführt wird, irgendwo ein "if" ist, das überprüft, ob es geschlafen werden muss und es tun muss, wenn es notwendig ist. Wenn Ihr Thread beispielsweise eine Funktion mit einer großen Schleife ausführt, kann es ausreichend sein, zu prüfen, ob er an jedem Ende der Iteration der Schleife (z. B. durch Überprüfung eines Booleschen Wertes durch Ihren aktuellen Code) schlafen muss. Aber in Ihrem Fall möchten Sie nicht aufdringlich für Ihren Thread-Code sein, sodass Unterbrechungen als eine wirklich bessere Alternative erscheinen. – Klaim

2

sleep beeinflusst immer den aktuellen Thread (den, der die Methode aufruft).