C++多线程入门基础,含示例代码

线程基本知识

  • 多线程库:#include
  • join():加入、汇合线程,阻塞主线程;
  • detach():分离,驻留后台;
  • 注意点:对于同一个线程而言,join()和detach()只能做一次

创建线程的方式

  1. 普通函数充当线程处理函数;
void print_1()
{
   cout<<"俺是一个线程"<<endl;
}
//测试函数,记得在主函数中调用
void test_1()
{
   thread t1(print_1);
   t1.join();
}
  1. 采用纳母达表达式充当线程处理函数;
void test_2()
{
   thread t1([](){cout<<"纳母达表达式充当线程处理函数";});
   t1.join();
}
  1. 带参函数创建线程
    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));
   //ref:包装引用作为传递的值,不包装会报错,invoke:未找到匹配的重载函数
   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));
   //move函数作用是移交权限
   cout<<"intelligence:"<<*ptr.get()<<endl;
   //权限移交移交,此时打印ptr的值,为空或者其他超大超小数字
  1. 类中成员函数作为线程处理函数,仿函数形式:类名的方式调用
class Function
{
public:
   void operator()()
   {
      cout<<"重载()号"<<endl;
   }
};
void test_6()
{
   //传对象
   Function object;
   thread t1(object);
   t1.join();
   //传匿名对象
   thread  t2((Function()));
   t2.join(); 
  1. 普通类中的成员函数
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();
}   
结语
  • 以上就是我所学习到线程创建的方式,如有错误或缺省,还请小伙伴不吝赐教;

版权声明:本文为qq_46282869原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。