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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM