Le 11/04/12 13:31, Master a écrit :
Hello all .
i am a newbie to the boost community . i recently started
learning about threads in boost . now there are some questions i
would like to ask :
Welcome.
1.where can i find examples showing practical uses
of boost::thread features?
The documentation doesn't contains too much examples. You can take a
look at the libs/thread/example and tutorial directories :(
2.how can i get all threads ID issued by me in my app?
No direct way other that storing them in a container. What is your
use case?
3.how can i iterate through running threads in my app ?
No direct way other than storing a thread pointer in a container.
What is your use case?
4.is there any
kind of means to get all the running threads using boost
library? if it does whats the calss? if it doesnt how can i do
that?
See above. I think that you need to specialize the thread class so
that it inserts a handle to the created thread on a container at
construction time and remove it at destruction time.
5.can i resume a thread after pausing it ? ( how can i pause a
thread? )
Boost.Thread doesn't provide fibers or resumable threads. There is
Boost.Fiber for that purpose (not yet in Boost).
6. how can i share a variable between two or more
threads , suppose i have a loop , i want two threads to
simultaneously iterate through it , if thread1 counted to 3,
thread2 continues it from 4 and so on . ?
i already tried
You need to protect the access to the loop index variable 'i' with a
mutex as you did with sum.
HTH,
Vicente
------
what
is wrong with my sample app ?
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
using namespace boost;
mutex bmutex;
int i=0;
int sum=0;
void IteratorFunc(int threadid)
{
for ( ; i<25 ; i++)
{
lock_guard<mutex> locker(bmutex);
cout<<"\t"<<threadid<<"\t"<<this_thread::get_id()<<"\t"<<i<<"\n";
sum+=i;
}
}
int main()
{
//boost::posix_time::ptime start =
boost::posix_time::microsec_clock::local_time();
thread thrd(IteratorFunc,1);
thread thrd2(IteratorFunc,2);
cout<<sum;
thrd.join();
thrd2.join();
}