2012-08-23 22 views
0

在我的代碼中,我想創建一堆類的對象,然後給每個對象一個單獨的線程,因此對象都可以在同一時間執行操作。有沒有一種方法可以爲每個類的對象增加一個提升線程?

for (i = 0; i < ROBOTCOUNT; i++) 
{ 
    Robot* r = new Robot; 
    boost::thread t(r); 
    robotList.push_back(r); 
} 

我想做類似上面的代碼。如果代碼是這樣的,代碼不會編譯,但這是我想要的一般想法。有誰知道如何做我想要的?

感謝

+0

什麼是「機器人」? –

+0

@KerrekSB這是我創建對象的類。 – Jigglypuff

+0

沒有開玩笑,但它怎麼定義* ?! –

回答

3

下面的代碼應該工作在C++ 11並可以並行執行多個Worker::foo() S:

#include <thread> 
#include <memory> 
#include <vector> 

struct Worker 
{ 
    void foo(); 
}; 

int main() 
{ 
    std::vector<std::unique_ptr<Worker>> workers; 
    std::vector<std::thread>    threads; 

    workers.reserve(N); 
    threads.reserve(N); 

    for (unsigned int i = 0; i != N; ++i) 
    { 
     workers.emplace_back(new Worker); 
     threads.emplace_back(&Worker::foo, workers.back().get()); 
    } 

    // ... later ... 

    for (auto & t : threads) { t.join(); } 
} 

如果你信任你的元素你甚至可以做到沒有唯一指針引用保持有效:

std::deque<Worker> workers; 

// ... 

for (unsigned int i = 0; i != N; ++i) 
{ 
    workers.emplace_back(); // pray this doesn't invalidate 
    threads.emplace_back(&Worker::foo, std::ref(workers.back())); 
} 
+0

如果您預先預約,則無需禱告。 :) – GManNickG

+1

@GManNickG:我知道......但它仍然讓我感到不安 - 你只知道有人會動態地添加工作人員,然後沒有上限。無論如何,我修好了! –

相關問題