Hi guys, This threaded code can be improved further: =============== ~WorkerThread() { while (!m_Running) ; m_Thread.join(); m_Running = false; } ================ Endlessly polling the m_Running with an empty while loop is inefficient. It would be better to use the boost::condition and boost::mutex for thread synchronization [the 2nd thread notifies the 1st (main() ) one when it completes its task]. A possible improvement can be achieved like this: --------------Begin------------- boost::condition taskCompleted; boost::mutex taskMutex; class WorkerThread { // class definition ... ~WorkerThread() { boost::mutex::scoped_lock lock(taskMutex); { taskCompleted.wait(lock); // wait for notification m_Thread.join(); } ... void run() { boost::mutex::scoped_lock lock(taskMutex); { // work to do // after work is done taskCompleted.notify_one();// I am done, your turn now. } // lock scope } run() scope }; // class definition --------------end------------- The volatile bool m_Running variable, its initialization and assignments, and const bool isRunning() const function in the original code are no longer needed. Cheers, Robert On Thu, Jul 30, 2009 at 7:33 AM, Ilya Sokolov <ilyasokol@gmail.com> wrote:
Rob Yull wrote:
WorkerThread() { m_Thread = boost::thread(boost::bind(&WorkerThread::run, boost::ref(this)));
It should not compile, you need
m_Thread = boost::thread(boost::bind(&WorkerThread::run, this));
or simply
m_Thread = boost::thread(&WorkerThread::run, this);
m_Running = true;
}
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users