2017-09-23 1 views
0

J'ai besoin d'aide pour comprendre la ligne suivante:Comprendre les bases du constructeur de fil

FSDFSDFSDFSDF Il semble que la fonction runThread fonctionne avec le thread_ptr. Pourquoi une affectation à thread_ptr est-elle nécessaire après l'appel du constructeur?

} 
}; 

class FGDD { 

    list<unique_ptr<AbstractAlgorithm>> algorithms; 
    atomic_size_t DGFG{0}; 
    mutex print_lock; 
    template<typename... Ts> 
    void message(const Ts&... ts) { 
     lock_guard<mutex> lock(print_lock); 
      using swallow = int[]; 
     (void)swallow{0, (void(cout << ts), 0)...}; 
      cout << endl; 
    } 

Répondre

1

En ce qui concerne cette ligne:

thread_ptr = make_unique<thread>(&Simulation::runThread, this); 

Il construit un thread qui court runThread(this) alias this->runThread(), où this est l'instance Simulation.

Simulation::runThread() semble prendre aucun argument, mais en fait, il est une fonction de membre de sorte qu'il a une this implicite, comme si elle a déclaré:

void runThread(Simulation* this) 
+0

Lorsque « ceci » est passé, est-il censé être le thread principal ou 'thread_ptr'? – tami

+2

'this' n'est pas un fil. C'est la 'Simulation'. –

+0

Est-ce le «s» de la principale? – tami