前言
在C++项目中,可以使用多线程来缩短算法消耗的时间,提高系统运行效率。
本博客将简单介绍如何在C++项目中创建新的线程,并在线程上实现对算法进行运算。
方法
1.准备工作:
# include <thread> # 导入头文件
using namespace std;
2.自定义函数定义:
void func() //无参
{
cout<<”thread”<<this_thread::get_id()<<endl; //获取当前线程id
}
tip: 对于有参函数,可以选用值传递(void func(string s))或者地址传递( void func(string& s))的方式。
3.创建线程,并将待执行的函数传入:
int main()
{
thread th = thread(func); //创建线程
th.join(); //主线程等待th线程终止之后才继续执行
}
tip: 对于有参函数,值传递:
string str = "test"
thread th = thread(func, str);
地址传递:
string str = "test"
thread th = thread(func, ref(str));
相关函数
th.detach() : 启动的线程自主在后台运行,当前的代码继续往下执行,不用等待进程结束。创建的新进程同时并发执行。
实现对某function object或callable object计算运行时间:
using namespace std::chrono;
auto time = system_clock::now(); //获取当前时间,用于计算线程所耗时间
注意
创建线程时 (thread th = thread(obj),传入的对象可以为函数(function)对象,也可以是一个可调用(callable)对象。
可调用对象一般包括:仿函数(即重载了operator()运算符的类对象)和Lambda表达式等。
Lambda表达式:
[] :捕获列表,lambda表达式可以访问的变量
空 无
n 按值传递访问变量n
&n 按地址传递访问变量n
= 按值传递访问所有变量
& 按地址传递访问所有变量
this 按值传递访问当前的this
() :lambda实现体中的参数
opt :lambda的选项
ret :lambda的返回类型(实现体内只有一条return语句或无返回时,可不写ret)
{} :实现体,具体要执行的代码
eg:
int a = 0;
auto c = [a](int b){return a + b}
------tbc-------
有用可以点个大拇指哦 😀