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 <boost/signal.hpp>
#include <iostream>
#include <boost/thread.hpp>
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<thread*> threadarray;

or
boost::thread* threadarray[3];


Please, in the future, could you show what error have you getting, the platform, the version ,... when you say that your code doesn't work so that we can help you or improve the library if a bug is found?

any idea how i can achieve sth similar? 

HTH,
Vicente