• 线程参数传递类对象


    为什么会调用一个传递一个类对象呢,这是一个我在写线程池的时候遇到的一个问题,当我把工作函数写成一个函数类的时候(重载operator()())线程传递参数的时候与普通函数出现了差别,当我像传递普通函数那样传递的时候,怎么也不能编译通过,于是在查找相关资料解决了这个问题,在这里记录一下

    //...头文件省略
    void func() {
        std::cout << "thread in func" << std::endl;
    }
    
    class functor {
        int m_id;
    public:
        functor(const int id) : m_id(id) { }
        void operator() () {
            std::cout << "thread in functor" << m_id << std::endl;
        }
    };
    
    int main() {
    int x = 11;
    std::thread t(func);  // OK
    // std::thread t1(functor(x)) // not ok
    std::thread t1( (functor(x)) ); // OK
    t.join();
    t1.join(); 
    return 0;
    }
    

    至于为什么要加一对括号,看其他说法是这和c++函数声明有关,具体有时间再去深究。

  • 相关阅读:
    mysql 基础sql语句
    mysql存储引擎概述
    docker命令总结
    python链接postgresql
    Log4.net示例
    postgresql 使用游标笔记
    npm常用命令
    Nginx命令
    Ubuntu命令总结
    NHibernate总结
  • 原文地址:https://www.cnblogs.com/codemeta-2020/p/12520495.html
Copyright © 2020-2023  润新知