Thread线程库的使用
detach():一般是配合多进程进行使用,可以让主线程先结束的同时,让子线程也继续运行。
join():创建一个线程后,我们能够等待这个线程完成,方便我们能够获取到这个线程执行出来的结果。
joinable():返回一个bool值来判断这个线程是不是可以调用join()和detach()。
如果对于一个进程不能调用join()和detach()的时候强行调用就会报错(system_error)
void fun() { cout << "hello world " << endl; } int main() { thread t1(fun); bool ifjoin = t1.joinable(); if (ifjoin) { t1.join(); } return 0; }
ref():传递引用类型。
当有函数需要传递引用变量的时候,主函数中线程需要传递一个引用变量的函数,此时就能使用到ref()函数。
void foo(int& x)
{
x += 1;
}int a =1;
thread t2(foo, ref(a));
t2.join();
创造一个智能指针代码:
#include <iostream>
#include <thread>
#include <memory>
using namespace std;
class Test
{
public:
void foo()
{
cout << "hello" << endl;
}
};
int main()
{
shared_ptr<Test> a = make_shared<Test>();
std::thread t(&Test::foo, a);
return 0;
}
call_once():多个线程要初始化同一个对象时,可以使用这个函数来实现一次性初始化。能够保证值创建一个对象。