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

  }

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

boost::thread boost库线程,布布扣,bubuko.com

时间: 2024-10-10 17:40:53

boost::thread boost库线程的相关文章

Boost::thread库的使用

阅读对象 本文假设读者有几下Skills [1]在C++中至少使用过一种多线程开发库,有Mutex和Lock的概念. [2]熟悉C++开发,在开发工具中,能够编译.设置boost::thread库. 环境 [1]Visual Studio 2005/2008 with SP1 [2]boost1.39/1.40 概要 通过实例介绍boost thread的使用方式,本文主要由线程启动.Interruption机制.线程同步.等待线程退出.Thread Group几个部份组成. 正文 线程启动 线

boost库 线程使用

最近在做一个消息中间件里面涉及到多线程编程,由于跨平台的原因我采用了boost线程库.在创建线程时遇到了几种线程创建方式现总结如下: 首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::function0<void>& threadfunc):      boost::function0<void>可以简单看为

boost::thread用法

最近在做一个消息中间件里面涉及到多线程编程,由于跨平台的原因我采用了boost线程库.在创建线程时遇到了几种线程创建方式现总结如下: 首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::function0<void>& threadfunc):      boost::function0<void>可以简单看为

Boost的某些库还是需要生成二进制的库的,必须安装才行,以及使用库的方法

头文件就是库使用者最常问的问题就是“我该怎么安装Boost”,这个也是我一开始最关心的问题,Boost这点做的很好,将大部分实现都封装在头文件里,所以对于一些基本的Boost库,其实是不需要安装的,只需要将头文件include到自己的程序里,当然前提是你把Boost的所有用到的头文件都拷贝了一份.Boost是如何做到这点的?这是因为Boost的头文件(*.hpp)包含了模板和内联函数,这点随便找一个hpp文件来看你就明白了,所以不需要去静态链接活动态链接二进制lib库了.不过Boost的某些库还

boost::thread之while(true)型线程终结方法

我们的程序中经常会用到线程来执行某些异步操作,而有些时候我们的线程执行的函数是这个样子的: [cpp] view plaincopyprint? void ThreadBody() { while( true ) { std::cout << "Processing..." << std::endl; Sleep(1000); } } 那么,从理论上讲,这个线程将永远的执行下去,直到这个线程所属的进程运行完毕为止.注意,即使这个线程函数是某个类的成员函数,即使我

Boost::Thread 多线程的基础知识

Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#include <boost/thread.hpp> 线程定义boost::thread 类是负责启动和管理线程.每个boost::thread对象代表一个单独的执行线程,是不可拷贝的.由于它是可以被移动到,所以它们可以被保存到会改变大小的容器中,并且从函数返回.这使得线程创建的详细信息可以被封装到一个函

Boost Thread and Synchronization Tutorial

Launching threads A new thread is launched by passing an object of a callable type that can be invoked with no parameter to the constructor. The object is then copied into internal storage, and invoked on the newly-created thread of execution. If the

一个C++基于boost简单实现的线程池

xl_blocking_queue.h ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #ifndef SRC_COMMON_BLOCKING_QUEUE_H_ #define SRC_COMMON_BLOCKING_QUEUE_H_ #

boost::thread编程-线程中断(转)

原文转自 http://blog.csdn.net/anda0109/article/details/41943691 thread的成员函数interrupt()允许正在执行的线程被中断,被中断的线程会抛出一个thread_interrupted异常,它是一个空类,不是std::exception或boost::exception的子类 #include "stdafx.h" #include <windows.h> #include <iostream> #