2012-06-12 14 views
43

Eventuali duplicati:
Start thread with member functionstd :: filo metodo chiamare di classe

Ho una piccola classe:

class Test 
{ 
public: 
    void runMultiThread(); 
private: 
    int calculate(int from, int to); 
} 

Come la sua possibilità di eseguire il metodo calculate con due diversi set di parametri (ad esempio calculate(0,10), calculate(11,20)) in due thread dal metodo runMultiThread()?

PS Grazie Ho dimenticato che ho bisogno di passare this, come parametro.

risposta

119
Non

così difficile:

#include <thread> 

void Test::runMultiThread() 
{ 
    std::thread t1(&Test::calculate, this, 0, 10); 
    std::thread t2(&Test::calculate, this, 11, 20); 
    t1.join(); 
    t2.join(); 
} 

Se è ancora necessaria il risultato del calcolo, utilizzare un futuro invece:

#include <future> 

void Test::runMultiThread() 
{ 
    auto f1 = std::async(&Test::calculate, this, 0, 10); 
    auto f2 = std::async(&Test::calculate, this, 11, 20); 

    auto res1 = f1.get(); 
    auto res2 = f2.get(); 
} 
+0

Tutti i tipi di problemi con questo. Perché gli upvotes? Il valore di ritorno è scartato deselezionato. Presumibilmente il metodo di calcolo itera su qualcosa - è thread-safe? – ravenspoint

+3

@ravenspoint: se è thread-safe fino all'OP, non? Sono d'accordo che il valore di ritorno dovrebbe essere recuperato, anche se l'OP non indica che ciò è inteso (potrebbe essere come 'printf'). 'std :: async' sarebbe un'alternativa. –

+0

Ecco perché ho chiesto all'OP quale problema ha riscontrato, invece di dare una mezza risposta che potrebbe finire per dare all'OP ancora più dolore. – ravenspoint

Problemi correlati