Le 15/04/12 14:19, Master a écrit :
Hello all . i have been trying to selectively dispose a thread among some other threads , but so far i wasnt successful in finding a way to do it . suppose i have a simple function which identifies any threads which gets into it and if a specific one is located ,it is disposed . simply sth like this :
Hi,
#include
#include <iostream> #include using namespace std; boost::thread threadarray[3]; int t(int x) { boost::id id(); Do you mean boost::thread::id? switch(boost::this_thread::get_id()) boost::thread::id can not be used in a switch. :( You can use if instead.
In addition the access to threadarray is not thread-safe, so you can not be sure it has been initialized as you could expect. You will need to protect it (read/write access) with a mutex :(
{ case threadarray[0].get_id(): cout<<"thread 1"; break; case threadarray[1].get_id(): *DISPOSE THIS THREAD or CHANGE OWNERSHITP, OR GET ANOTHER JOB TO IT , OR CHECK IF IT WAS SUCCESSFUL OR NOT*
Could you clarify what exactly do you want to do if this is important for you?
break; case threadarray[3].get_id(): cout<<"thread 3"; break; default: cout<<"default"; } return 0; }
int main() { boost::thread t1(t,5), t2(t,6),t3(t,7);
threadarray[0] = t1.move(); threadarray[1] = t2.move(); threadarray[2] = t3.move();
for(int i = 0; i <3;i++) { threadarray[i].join(); } system("pause"); }
i cant either use a switch statement to identify which thread im dealing with at the moment , nor can i find any means to keep track of my threads , and manage them in situations like this ( i already tried vector(boost::thread> my vect; and tries to use std::for_each(vect.begin(),vect.end(),somefunction_accepting boost::thread) , this doesnt work !! )
You need to use a move aware vector, e.f. boost::container::vector. If
you don't have access to them use
std::vector
any idea how i can achieve sth similar?
HTH, Vicente