J'ai une classe définie comme ceci: Ceci n'est pas complet et ne compilera probablement pas. Ma question est, comment est-ce que j'initialise le tableau de travailleurs passant dans la classe externe nommée Server.Classe interne et initialisation
Ce que je veux est un vecteur de threads de travail. Chaque thread de travail a son propre état mais peut accéder à d'autres données partagées (non affichées). Aussi, comment puis-je créer les discussions. Doivent-ils être créés lors de la création de l'objet de classe ou en externe à partir d'un groupe de threads?
De même, comment dois-je procéder pour arrêter les filets de manière propre et sûre?
EDIT:
Il semble que je peux initialiser Worker comme ceci:
Server::Server(int thread_count)
: _workers(thread_count), Worker(*this)), _thread_count(thread_count) { }
Et je suis en train de faire cela dans Run Server pour créer les threads.
boost::thread_group _threads; // a Server member variable
Server::Run(){
for (int i = 0; i < _thread_count; i++)
_threads.create_thread(boost::bind(&Server::Worker::Run, _workers(i)));
// main thread.
while(1) {
// Do stuff
}
_threads.join_all();
}
Quelqu'un a-t-il des problèmes avec cela? Et qu'en est-il de l'arrêt sûr? Un problème que j'ai trouvé avec lui est que les objets de travail ne semblent pas être construits! oups. Oui, ils ont besoin d'un constructeur de copie sur la classe Worker. Mais bizarrement, la création des threads a pour résultat que le constructeur de copie pour Worker est appelé plusieurs fois.
D'où vient la file d'attente d'entrée? Combien de travailleurs voulez-vous créer? –
J'ai supprimé la file d'attente d'entrée. Je pense que cela déroute les choses. Le nombre si les travailleurs que je veux créer est variable et provient d'un fichier de configuration. – Matt
Avez-vous vraiment besoin d'une classe à définir dans l'autre? Cela ne fait que me rendre moins lisible. –