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

  • 相关阅读:
    grunt 记录
    angularjs 剪贴板
    translate
    鼠标事件
    Typora书写macdown语法教程
    idea常用插件安装
    JDBC使用8.0驱动包连接mysql设置时区serverTimezone
    多服务器部署脚本
    jar包重启脚本-restart.sh
    spring-boot分环境打包为tar包
  • 原文地址:https://www.cnblogs.com/daibigmonster/p/7834745.html
Copyright © 2011-2022 走看看