首页 > 编程语言 > 详细

2.1.1 启动线程

时间:2021-05-08 00:06:54      阅读:30      评论:0      收藏:0      [点我收藏+]

  使用C++线程库来开始一个线程,需要构造一个std::thread对象。

void do_some_work();
std::thread my_thread(do_some_work);

  std::thread的构造函数参数可接受任何可调用对象,所以,可以将一个带有调用运算符的类的实例传递给std::thread的构造函数。在这种情况下,函数对象f被复制到新线程的存储器中,并从那里调用。

class background_task()
{
 public:
    void operator()() const
    {
        do_something();
        do_something_else();
    }
};

background_task f;
std::thread my_thread(f);

但是,如果你传递一个临时的且未命名的变量,那么其语法可能与函数声明一样。在这种情况下,编译器会将其解释为函数声明,而非对象定义。

// 函数声明:返回类型为std::thread;函数名为my_thread;参数类型是函数指针
std::thread my_thread(background_task ());

为了避免这种情况,可以使用以下三种方式。

// 额外的括号避免其解释为函数声明
std::thread my_thread((background_task ()));
// 使用新的统一初始化语法
std::thread my_thread{background_task ()};
// 使用lambda表达式
std::thread my_thread([](
    do_something(); 
    do_something_else();  
));

 

2.1.1 启动线程

原文:https://www.cnblogs.com/tgcf/p/14742066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!