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

  • 相关阅读:
    Python assert(断言)
    Python importlib(动态导入模块)
    Python 异常处理
    Qt Clipboard剪贴板简单使用
    Qt5 QTableWidget设置列表自动适应列宽
    Fix VNC Desktop Sharing on Ubuntu Desktop 14.04
    Golang 交叉编译
    stdobj to array php
    Elasticsearch-集群原理
    Elasticsearch-基本操作2
  • 原文地址:https://www.cnblogs.com/daibigmonster/p/7834745.html
Copyright © 2011-2022 走看看