美文网首页
callable类型和多线程启动

callable类型和多线程启动

作者: 稻云麦花 | 来源:发表于2019-05-17 21:57 被阅读0次

    callable类型和多线程启动

    1. 返回值void,不接受参数的函数
      void hello() {
      
      }
      std::thread t(hello); // 启动线程
      
    2. 类的实例,这个类支持void operator ()();
      class background_task{
          public:
              void operator ()() {
                  do_something();
              }
      };
      background_task f;
      std::thread my_thread(f); // 启动线程
      // 错误示例1
      std::thread my_thread(background_task());
      // 错因
      // 尝试传递一个临时的未命名的background_task类型的变量,企图构造一个线程并启动
      // 然而,这个会被编译器解释为一个函数声明。
      // 具体来说,
      // 就是一个返回类型为std::thread
      // 函数名为my_thread
      // 函数的参数类型是指向不接受参数同时返回background_task类型对象的函数的指针
      // 换句话说是
      // 函数的参数类型是一个函数指针,什么样的函数指针呢?这个函数指针是指向不接受参数同时返回background_task类型对象的函数
      // 这个错误的确非常的隐蔽,不得不说真的强……
      // 
      // 如何正确的实现这个意图呢?
      std::thread my_thread( (background_task()) ); // 方法1 加一对小括号
      std::thread my_thread{background_task()}; // 方法2 改用新的统一初始化方法——使用大括号
      

    本文里面的代码大多来自于《C++并发变成实践》中的例子代码,版权不属于我。

    相关文章

      网友评论

          本文标题:callable类型和多线程启动

          本文链接:https://www.haomeiwen.com/subject/tmuaaqtx.html