2014-04-24 62 views
-3

能否請你幫我翻譯從並行線程升壓庫下面的方法:翻譯到<升壓/ thread.hpp>

pthread_t tid; // I guess this should become : boost::thread tid; 
//... some instructions ... 

pthread_create(&tid, NULL, (void*(*)(void*))process_request, (void*)some_ptr); 

void *process_request(void *soap) 
{ 
    pthread_detach(pthread_self()); 
    //... some instructions ... 
    return NULL; 
} 

謝謝你很多!

+0

你在問仙女和獨角獸!沒有辦法翻譯,這是完全不同的API! –

+0

這個問題似乎是脫離主題,因爲它是關於要求不可行的事情。 –

+3

@πάνταῥεῖ你是否討厭OP沒有顯示他做了什麼,或者你不知道Boost Thread實際上是C++ 11''支持的前景? – sehe

回答

3

它只是:

boost::thread(&process_request, some_ptr).detach(); 

您可以通過std取代boost和你的程序是用C++ 11便攜。

請注意,process_request現在實際上可以採用強類型的參數。如果你想傳遞一個參考,使用boost::ref(或std::ref,確實):

void process_request(MyData& data) 
{ 
} 

MyData data; 
boost::thread th(&process_request, boost::ref(data)); 
th.join(); 

這有點在C++ 11的圖案,不過,移動數據到線程函數,所以以避免通過參數的比賽:

void process_request(MyData&& data) 
{ 
} 

MyData data; 
boost::thread th(&process_request, std::move(data)); 
th.join(); 
+0

你好!首先感謝您的回答! +1。那麼,我仍然有一些困惑:如何在** process_request **定義中調用** detach()**方法?此外,而不是使用構造函數來設置&process_request ...有沒有一種方法來分配?因爲我必須在其他地方聲明** th **。萬分感謝! – Farah

+2

當然,聲明和賦值都是分開的,並且在線程函數內部分離:** [Live On Coliru](http://coliru.stacked-crooked.com/a/8839110cccccb432)**。免責聲明:我認爲這兩件事都是不好的想法。使用thread_group,加入>分離。 – sehe

+1

完美!我明天會給你一個賞金來區分你有用的答案! – Farah