C++ Boost库:简介和第一个示例程序
C++ Boost库:数值转换 lexical_cast
C++ Boost库:字符串格式化 format
C++ Boost库:字符串string_algo
C++ Boost库:字符串算法string_algo
C++ Boost库:类型推导BOOST_AUTO/BOOST_TYPEOF
C++ Boost库:分词处理库 tokenizer
C++ Boost库:windows下编译Boost库
C++ Boost库:日期时间库 date_time
C++ Boost库:智能指针scoped_ptr
C++ Boost库:数组智能指针 scoped_array
C++ Boost库:共享所有权的智能指针 shared_ptr
C++ Boost库:工厂函数 make_shared
C++ Boost库:共享有权的数组智能指针shared_array
C++ Boost库:弱引用智能指针 weak_ptr
C++ Boost库:禁止拷贝 nocopyable
C++ Boost库:计时器 timer
C++ Boost库:普通数组array
C++ Boost库:散列容器 unordered_set、unordered_multiset
C++ Boost库:散列容器 unordered_map、unordered_multimap
C++ Boost库:双向映射容器 bimap
C++ Boost库:环形缓冲区 circular_buffer
C++ Boost库:动态多维数组 multi_array
C++ Boost库:使用property_tree解析XML和JSON
C++ Boost库:简化循环 BOOST_FOREACH
C++ Boost库:随机数库 Random
C++ Boost库:引用库 ref
C++ Boost库:绑定库 bind
C++ Boost库:线程库 thread 跨平台多线程
C++ Boost库:互斥量 mutex

1. Windows、Linus多线程

平台WindowsLinux
创建线程CreateThread()
_beginthreadex()
pthread_create()
销毁线程ExitThread()
TerminateThread()
pthread_exit()
pthread_cancel()
暂停线程SuspendThread()
恢复线程ResumeThread()
等待线程WaitForSingleObject()pthread_join()

2. thread库简介

Boostthread库为C++增加了线程处理能力,它提供简明清晰的线程、互斥量等概念,可以很容易的创建 跨平台的多线程应用。它支持使用最广泛的 WindowsPOSIX线程规范(Unix下应用程序共同遵循的亠种规范),无需修改就可以在 windowsUnixLinux等系统上编译运行

使用需要包含的头文件

#include<boost/thread.hpp>

使用的静态库:

#pragma comment(lib, "libboost_thread-vc100-mt-gd-x32-1_67.lib")

3. thread 类

thread(thread fun);参数可以是函数对象或者函数地址。当一个 thread执行完成时,这个子线程就会消失。但这个线程对象不会消失,它仍然是一个还处在它的生存期的C++对象。

  • join():一直阻塞等待,直到当前线程结束
  • time_join():线程未结束时,最多等待多少时间后返回。
  • thread::yield():当前线程放弃余下的时间片。
  • this_thread::sleep(chrono::seconds(1));:让线程睡眠

4. 示例代码

#include<boost/thread.hpp>
using  namespace  boost; //名字空间

#include<iostream>
using namespace std;

#pragma comment(lib, "libboost_thread-vc100-mt-gd-x32-1_67.lib")

void  ThreadFun(string  & threadName)
{
   for (size_t i = 0; i < 5; i++)
   {
   	printf("%s 执行!\n", threadName.c_str());

   	//线程睡眠
   	this_thread::sleep(posix_time::seconds(1));
   }
}

int main()
{ 
   //定义线程对象,线程执行函数,函数参数,构造
   thread  t1(ThreadFun, string("线程1"));//立即运行

   thread  t2(ThreadFun, string("线程2"));//立即运行

   //t1.join();//先阻塞,等待子线程执行完毕后返回
   //t2.join();//先阻塞,等待子线程执行完毕后返回

   //如果线程还没结束,最多等待3秒
   t1.timed_join(posix_time::seconds(8));

   cout << "main结束!" << endl;

   getchar();
   return 0;
}

运行结果:

image-20210504192342998

Logo

更多推荐