码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 并发编程2 --向线程函数传递参数

时间:2017-11-15 22:02:42      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:特殊情况   ops   bsp   特殊   data   proc   display   class   std   

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

C++ 并发编程2 --向线程函数传递参数

标签:特殊情况   ops   bsp   特殊   data   proc   display   class   std   

原文地址:http://www.cnblogs.com/daibigmonster/p/7834745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!