2011-06-19 36 views
2

我有一個QList並希望並行處理其所有元素。問題是我需要傳遞一個參數到my_function。下面的代碼不允許這樣做。QT,併發編程和傳遞參數到功能

QList<something> output = QtConcurrent::blockingMapped(
    input, 
    my_function 
); 

我可以爲每組參數使用不同的函數。我也可以使用全局變量。我也可以嘗試在QT函數中重寫構建。但是,應該有更好的解決方案。任何想法?

回答

4

假設您要傳遞給函數的參數與項目無關,您可以創建一個函數,它繼承std::unary_function<const something&,void>,它的構造函數接受要傳遞給它的參數。然後,使用函子的地方,你會使用該函數。例如,

struct MyFunctor : public std::unary_function<const something&,void> { 
public: 
    myFunctor(int s) { _i = i; } 
    void operator()(something& str) { 
    something.apply(_i); 
    } 
private: 
    int _i; 
}; 

… 

MyFunctor myFunctor(i); 
QList<something> output = QtConcurrent::blockingMapped(
    input, 
    myFunctor 
); 
1

你需要將什麼參數傳遞給函數?你不能直接做到這一點。你可以做的是將參數傳遞給一個不同的結構,其中定義了一個operator(),你可以從中訪問該參數。那就是如果你不想使用全局值。

看看here的例子。

+0

我想傳遞一個整數(int)。 – Michas