2012-06-12 11 views
43

Duplicar posibles:
Start thread with member functionstd :: hilo de la clase

tengo una clase pequeña:

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

Cómo su posible ejecutar el método con calculate dos diferentes conjuntos de parámetros (por ejemplo calculate(0,10), calculate(11,20)) en dos hilos del método runMultiThread()?

PS Gracias He olvidado que necesito pasar this, como parámetro.

Respuesta

119

No tan duro:

#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(); 
} 

Si aún se necesita el resultado del cálculo, utilice un futuro lugar:

#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

todo tipo de problemas con esto. ¿Por qué los upvotes? El valor de retorno se descarta sin marcar. Presumiblemente, el método de cálculo itera sobre algo: ¿es seguro para subprocesos? – ravenspoint

+3

@ravenspoint: Si es seguro o no, depende del OP, ¿no? Estoy de acuerdo en que el valor de retorno debería recuperarse, aunque el OP no indica que eso esté destinado (podría ser como 'printf'). 'std :: async' sería una alternativa. –

+0

Es por eso que le pregunté al OP qué problema encontró, en lugar de responder a medias respuestas que terminarían dándole más dolor a la OP. – ravenspoint

Cuestiones relacionadas