C++线程的使用
线程传引用的时候要加ref 线程类将一个函数和这个函数的参数绑定
//线程类的构造函数 是一个变参模板函数
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
#include<iostream>
#include<algorithm>
#include<thread>
using namespace std;
void func(int x) {
for (int i = 0; i <x; i++) cout << i << endl;
return ;
}
void add_one(int &x) {
x += 1;
return ;
}
int main() {
int n = 8;
//thread t1(func, 123), t2(func, 30);
thread t1(add_one, ref(n)); //在线程里面传引用的话得加ref
t1.join();
cout << n << endl;
cout << "helloc" << endl;
return 0;
}
仿造线程的构造自己模拟
void add_one(int &x) {
x += 1;
return ;
}
class Task {
public:
template<typename FUNCTION, typename ...ARGS>
Task(FUNCTION &&f, ARGS ...args) {
cout << "Task " << endl;
f(forward<ARGS>(args)...); // 准确的向前传递
}
};
int main() {
int n = 8;
//thread t1(func, 123), t2(func, 30);
thread t1(add_one, ref(n)); //在线程里面传引用的话得加ref
t1.join();
Task t2(add_one, ref(n)); //这里把ref去掉也不会报错? 存在右值变左值
cout << n << endl;
cout << "helloc" << endl;
return 0;
}
bind
将函数和参数进行打包生成新的函数 , 用于实现线程池.
bind绑定 function<> 定义返回值类型
class Task {
public:
template<typename FUNCTION, typename ...ARGS>
Task(FUNCTI