boost::thread boost库线程

一.boost::thread的创建

  1.线程创建方法一:

    boost::shared_ptr<boost::thread> writeThread_;

    boost::function0<void> f = boost::bind(&DBTaskMgr::execute, this);

    writeThread_ = boost::shared_ptr<boost::thread>(new boost::thread(f));

  2.线程创建方法二:

    boost::thread myThread(threadFun);  //函数无参数,并返回void类型

  3.放弃时间片: 

    boost::thread::yield();

    当前线程放弃余下的时间片。

  4.等待一个线程:

    myThread.join();

    注:调用这个方法的线程进入wait状态,直到myThread代表的线程完成为止。如果它不结束的话,join方法就不会返回。join是一个等待子线程结束的最好的方法。

      如果主程序不调用join方法而直接结束,它的子线程有可能没有执行完成,但是所有的子线程也随之退出。不调用join方法,主线程就不会等待它的子线程。

 

二.从一个线程中给另一个线程发送通知

   当需要线程等待某个事物时,可以创建一个condition对象,然后通过这个对象来通知那些等待的线程。

  #include <iostream>

  #include <boost/thread/thread.hpp>

  #include <boost/thread/condition.hpp>

  #include <boost/thread/mutex.hpp>

  

  boost::shared_ptr<boost::thread> writeThread_;

  boost::mutex taskMutex_;

  boost::condition_variable taskCond;

  bool taskReady = false;

  while(true)
  {
    {
      boost::unique_lock<boost::mutex> lock(taskMutex_); //锁定taskMutex_对象
      while (!taskReady)
      {
        taskCond.wait(lock); //解开这个taskMutex_上的锁,然后进行等待或者休眠,直到它的条件得到了满足
      }
      taskReady = false;

    }

      ...............................................

      ......
  }

 

  

  

  void DBTaskMgr::enqueueTask(IDBTask * task)
  {
    taskQueMutex_.lock();
    taskQue_.push_back(task);
    taskQueMutex_.unlock();

    

    {
      boost::unique_lock<boost::mutex> lock(taskMutex_);
      taskReady = true;
    }

    taskCond.notify_one(); //解除线程等待或休眠

    //taskCond.notify_all(); //解开所有线程等待或休眠

  }

 

  .....................................

posted on 2014-06-17 20:09  米**饭  阅读(352)  评论(0编辑  收藏  举报

导航