C++ 並發編程2 --向線程函數傳遞參數

來源:互聯網
上載者:User

標籤:特殊情況   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 --向線程函數傳遞參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.