线程基本知识
- 多线程库:#include
- join():加入、汇合线程,阻塞主线程;
- detach():分离,驻留后台;
- 注意点:对于同一个线程而言,join()和detach()只能做一次
创建线程的方式
- 普通函数充当线程处理函数;
void print_1()
{
cout<<"俺是一个线程"<<endl;
}
void test_1()
{
thread t1(print_1);
t1.join();
}
- 采用纳母达表达式充当线程处理函数;
void test_2()
{
thread t1([](){cout<<"纳母达表达式充当线程处理函数";});
t1.join();
}
- 带参函数创建线程
3.1 普通函数带参函数
3.2 以引用作为函数参数的函数
3.3 智能指针充当函数参数
void print_2(int num)
{
cout<<"id: "<<num<<endl;
}
void test_3()
{
int num=1213;
thread t1(print_2,num);
t1.join();
}
void print_3(int& num)
{
num=1314;
cout<<"id: "<<num<<endl;
}
void test_4()
{
int num=0;
thread t1(print_3,ref(num));
t1.join();
cout<<"主线程:"<<num<<endl;
}
void print_4(unique_ptr<int>ptr)
{
cout<<"智能指针:"<<*ptr.get()<<endl;
}
void test_5()
{
unique_ptr<int>ptr(new int(999));
cout<<"intelligence:"<<*ptr.get()<<endl;
thread t1(print_4,move(ptr));
cout<<"intelligence:"<<*ptr.get()<<endl;
- 类中成员函数作为线程处理函数,仿函数形式:类名的方式调用
class Function
{
public:
void operator()()
{
cout<<"重载()号"<<endl;
}
};
void test_6()
{
Function object;
thread t1(object);
t1.join();
thread t2((Function()));
t2.join();
- 普通类中的成员函数
class Common
{
public:
void print(int& id)
{
cout<<"id: "<<id<<endl;
}
};
void test_7()
{
Common com;
int id=1213;
thread t1(&Common::print,com,ref(id));
t1.join();
}
结语
- 以上就是我所学习到线程创建的方式,如有错误或缺省,还请小伙伴不吝赐教;