Published using Google Docs
Boost condition variable example
Updated automatically every 5 minutes

This is an example of how to use boost condition variable for waiting an event on another thread.

#include <iostream>

#include <boost/asio.hpp>

#include <boost/thread/mutex.hpp>

#include <boost/thread/thread.hpp>

boost::mutex io_mutex;

bool worker_is_done = false;

boost::condition_variable condition;

void workFunction()

{

    std::cout << "Waiting a little..." << std::endl;

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

    worker_is_done = true;

    std::cout << "Notifying condition..." << std::endl;

    condition.notify_one();

    std::cout << "Waiting a little more..." << std::endl;

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

}

int main()

{

    boost::mutex::scoped_lock lock(io_mutex);

    boost::thread workThread(&workFunction);

   

    while (!worker_is_done) condition.wait(lock);

    std::cout << "Condition notified." << std::endl;

    workThread.join();

    std::cout << "Thread finished." << std::endl;

   

    return 0;

}

To compile:

g++ test_wait.cpp -lboost_system -lboost_thread

Sources:

http://stackoverflow.com/questions/16907072/how-do-i-use-a-boost-condition-variable-to-wait-for-a-thread-to-complete-process

http://stackoverflow.com/questions/2379806/using-condition-variable-in-a-producer-consumer-situation

http://www.boost.org/doc/libs/1_55_0/libs/thread/example/mutex.cpp