• 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(); //解开所有线程等待或休眠

      }

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

  • 相关阅读:
    Scrum 冲刺博客第五篇
    Scrum 冲刺博客第四篇
    Scrum 冲刺博客第三篇
    ajax send()
    form action中get post传递参数的问题
    struts2 iterator中if标签的使用
    表格内容自动换行
    从js向Action传中文参数出现乱码问题的解决方法
    java开发环境搭建
    Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/
  • 原文地址:https://www.cnblogs.com/wuchunming/p/3793419.html
Copyright © 2020-2023  润新知