zoukankan      html  css  js  c++  java
  • C++ 并发编程2 --向线程函数传递参数

    1向线程函数传递参数比较简单,一般的形式如下

    void f(int i,std::string const& s);
    std::thread t(f,3, "hello");

    但仍然有一些特殊情况,有时换我们想传递一些引用,但是发现我们传递的对象是对象的拷贝而不是对象本身,如下所示

    void update_data_for_widget(widget_id    w,widget_data&    data);    //    1
    void oops_again(widget_id    w)
    {
        widget_data    data;
        std::thread    t(update_data_for_widget,w,data);    //    2
        display_status();
        t.join();
        process_widget_data(data);    //    3
    }

    这里就要注意2启动的新进程中传递的参数并不是参数本身,而是参数的拷贝,如果我们向传递参数本身的话,要这么写

    std::thread t(update_data_for_widget,w,std::ref(data))

    class X
    {
    public:
        void do_lengthy_work();
    };
    X my_x;
    std::thread t(&X::do_lengthy_work,&my_x);    //    1

    在这段代码中,将my_x.do_lengthy_work作为线程函数,my_x的地址1作为指针对象提供给函数,如果函数有参数的话可以为成员函数提供参数:     std::thread     构造函数的第三个参数就是成员函数

    的第一个参数,以此类推。

    class X
    {
    public:
        void do_lengthy_work(int num);
    };
    X my_x;
    std::thread t(&X::do_lengthy_work,&my_x,num);    //    1

  • 相关阅读:
    sql分页 sql server,oracle,db2,mysql
    部分SQL优化
    javascript &&和||的其他用法
    socket 套接字
    网络协议篇
    异常处理
    元类type 反射 函数与方法 双下方法
    私有 实例方法 类方法 静态方法 属性 issubclass isinstance区别
    面向对象的三大特性 鸭子类型 类的约束 super的深度剖析
    继承
  • 原文地址:https://www.cnblogs.com/daibigmonster/p/7834745.html
Copyright © 2011-2022 走看看