
Hi All, I have just started learning boost. I want my thread to support following functions Pause(); Resume(); Stop();. I have come up with following code, which ends up as dead lock. Can some one please guide me as how to achieve the desired functionality. Would really appreciate any help. Thanks. Kaz class qthread { public: boost::thread* mThread; boost::condition_variable mCond; boost::mutex mMutex; bool mExit; qthread(): mExit(false) { // create function pointer to local Execute function boost::function
fptr = &qthread::Execute; fptr(this); you call Execute() here in the main thread
// pass on function pointer along with this reference to boost thread boost::thread th0( fptr, this); // assign temp thread to local variable mThread = &th0; }
and now your th0 is destroyed leaving invalid pointer. Strange, I thought gcc has already learned to warn about such stuff, but I don't get any warning with gcc 4.3.2 here even with -Wall
mCond.wait(lock); //<< DEAD LOCK
It's not a dead lock, don't swear with so scary words ;). If you'd debug the program, you see you are still having only one thread by the time. -- Slava