线程创建
在c++11中引入头文件#include(C++11的标准库中提供了多线程库),该头文件中定义了thread类
创建一个线程即实例化一个该类的对象,实例化对象时候调用的构造函数需要传递一个参数,该参数就是函数名,thread th1(proc1);
如果传递进去的函数本身需要传递参数,实例化对象时将这些参数按序写到函数名后面,thread th1(proc1,a,b);
只要创建了线程对象(传递“函数名/可调用对象”作为参数的情况下),线程就开始执行(std::thread 有一个无参构造函数重载的版本,不会创建底层的线程)。
线程的创建原则
- 程序库不应该在未提前告知的情况下创建自己的背景线程
- 尽量用相同的方式创建线程
- 进入main函数之前不应该启动线程
- 程序中线程的创建最好能在初始化阶段全部完成。
如何创建线程
- 通过函数
- 通过类对象创建线程
- 通过lambda表达式创建线程
#pragma once
#include <iostream>
#include <thread>
using namespace std;
//thread:标准库的类
//join:阻塞主线程并等待
//detach(): 将主线程和子线程完全分离,子线程会驻留在后台运行,被C++运行时库接管,失去控制
//joinable():判断是否可以成功使用join()或者detach()
//程序说明:detach后不能在实施join
namespace CThread
{
void myPrint()
{
cout << "函数线程开始运行" << endl;
cout << "函数线程运行结束了" << endl;
}
class<