Questa è una domanda puramente di filosofia del design nel contesto del C ++.
È una filosofia di design accettabile avviare un thread all'interno di un costruttore? Ho una libreria la cui unica responsabilità è gestire in modo asincrono alcune richieste dalle API esposte. Affinché funzioni, deve iniziare un thread internamente.
Ho MyClass
che è una classe pubblica esposta dalla mia libreria.
//MyClass.h
MyClass {
private:
std::thread m_member_thread;
}
Va bene iniziare il thread all'interno del costruttore in questo modo?
//MyClass.cpp
MyClass::MyClass() {
// Initialize variables of the class and then start the thread
m_member_thread = std::thread(&MyClass::ThreadFunction, this);
}
Oppure, è meglio esporre un metodo che il codice utente della mia libreria chiama esplicitamente per avviare il thread?
//MyClass.cpp
MyClass::MyClass() {
}
MyClass::StartThread() {
m_member_thread = std::thread(&MyClass::ThreadFunction, this);
}
O davvero non importa?
PS:
Sì, il thread è leggero e non esegue operazioni molto pesanti. Voglio evitare le risposte che dicono, dipende da cosa fa il thread ecc. Questa è una domanda puramente di filosofia del design.