2012-12-19 3 views
8

Ich erstelle in einem Prozess etwa 300 Boost-Threads. Gibt es eine Möglichkeit, einem bestimmten Thread basierend auf der Thread-ID beizutreten?Einem bestimmten Boost-Thread beitreten

+3

Wie verwalten Sie diese Threads? (Sie erinnern sich irgendwie an die abgeschossenen Threads, oder?) –

Antwort

9

Es hängt himmlisch davon ab, wie Sie die boost::thread s speichern. Wenn man sie in einem Behälter (mit T = boost::thread*) speichern, können Sie einfach so etwas wie

for(iterator it = ctn.begin(); it != ctn.end(); ++it){ 
    if(it->get_id() == join_thread_id){ 
     it->join(); 
     break; 
    }   
} 

jedoch verwenden, wenn Sie nicht Ihre Fäden irgendwo speichern und new boost::thread nur verwenden, ohne den Zeiger Spar es nicht möglich ist, da boost doesn keine automatische Buchhaltungsfunktionalität bereitstellen.

1. Anmerkung: Denken Sie daran, dass Sie boost::thread::id verwenden müssen, um die ID zu speichern.
2. Bemerkung: std::map<boost::thread::id,boost::thread*> könnte für solche Aufgaben nützlich sein.

+1

oder 'find_if (Anfang (ctn), Ende (ctn), [join_thread_id] (Iterator es) {return it-> get_id() == join_thread_id;}); ' –

+0

Wenn es viele Threads gibt, ist die Karte nicht besser ?. Ich frage das mit Leistung im Hinterkopf. –

+0

@ AdriC.S .: Es hängt von der Bedeutung von "viel" ab. Eine Karte skaliert schön mit der Anzahl der Argumente (sublineare Suchkomplexität), aber abhängig von der tatsächlichen Anzahl der Elemente kann ein kleiner Vektor eine kleine Karte übertreffen. –