Boost logo

Boost Users :

Subject: Re: [Boost-users] [thread] : pause/resume thread
From: bit bit (g_rambot_at_[hidden])
Date: 2011-04-15 09:36:29

inside qthread contructor, copy just the following and you are good to go.

mThread = new boost::thread(bind(&qthread::Execute, this));

Date: Fri, 15 Apr 2011 11:06:56 +0100
From: sfx810_at_[hidden]
To: boost-users_at_[hidden]
Subject: [Boost-users] [thread] : pause/resume thread

Hi All, I have just started learning boost. I want my thread to support following functions
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.
class qthread
    boost::thread* mThread;
    boost::condition_variable mCond;
    boost::mutex mMutex;
    bool mExit;
    qthread(): mExit(false)

        // create function pointer to local Execute function
        boost::function<void (qthread*)> fptr = &qthread::Execute;
        // pass on function pointer along with this reference to boost thread

        boost::thread th0( fptr, this);
        // assign temp thread to local variable
        mThread = &th0;
    void Resume()

    void Stop()
        mExit = true;
     void Pause()
     // todo
    virtual void Execute()

        std::cout<<"Entering thread Execution"<<std::endl;
        boost::unique_lock<boost::mutex> lock(mMutex);
        mCond.wait(lock); //<< DEAD LOCK

        int i = 0;
        while ( !mExit )
                while ( 1 )
                    std::cout<<"Executing thread, cycle i = "<<++i<<std::endl;

            catch( boost::thread_interrupted&)
                std::cout<<"thread_interrupt exception"<<std::endl;

        std::cout<<"Exiting thread"<<std::endl;
int main()
    qthread qt; ///<< DEAD LOCK

    boost::this_thread::sleep(boost::posix_time::seconds(3) );
    boost::this_thread::sleep(boost::posix_time::seconds(3) );

Boost-users mailing list

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at