Classes et multi thread sur méthodes non statiques
Fermé
jktln
-
25 févr. 2017 à 10:43
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 25 févr. 2017 à 11:43
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 25 févr. 2017 à 11:43
A voir également:
- Classes et multi thread sur méthodes non statiques
- Whatsapp multi sim - Guide
- Whatsapp multi compte - Guide
- Remportez 3 des jeux classés plato - Forum jeux en ligne
- Multi exp heartgold - Forum Jeux vidéo
- 2eme multi exp? - Forum Jeux vidéo
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
25 févr. 2017 à 11:29
25 févr. 2017 à 11:29
Bonjour,
pthread_create() c'est du langage C, en C++ on préférera std::thread.
Une méthode non statique a besoin d'une donnée supplémentaire pour se dérouler, c'est l'objet. Un thread c'est une fonction qui se déroule donc peut être une méthode statique.
Ici, on pourrait faire :
Sinon en C++11, on utiliserait plutôt
pthread_create() c'est du langage C, en C++ on préférera std::thread.
Une méthode non statique a besoin d'une donnée supplémentaire pour se dérouler, c'est l'objet. Un thread c'est une fonction qui se déroule donc peut être une méthode statique.
Ici, on pourrait faire :
class A { public: A(int _champ1, int _champ2) : champ1(_champ1), champ2(_champ2) {} void calcul() {Fait un calcul relativement long} static void* thread_it( void* z ) { ((A*)z)->calcul(); return 0; } private: int champ1, champ2; } int main() { A a1 = new A(0, 0) , a2 = new A(1, 1); pthread p1 , p2; pthread_create(&p1, NULL, &A::thread_it, a1 ); pthread_create(&p2, NULL, &A::thread_it, a2 ); }
Sinon en C++11, on utiliserait plutôt
std::thread( &A::calcul , a1 ).detach();qui a beaucoup plus de souplesse, surtout s'il y a des valeurs à retourner.
luckydu43
Messages postés
3484
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
815
Modifié par luckydu43 le 25/02/2017 à 11:33
Modifié par luckydu43 le 25/02/2017 à 11:33
Bonjour !
Je me pointe là comme une fleur sans être certain de ce que je dis...
Est-il possible de déclarer les attributs et les méthodes utilisés dans le main (A et calcul() pour les citer) comme étant des statiques ? La déclaration d'une méthode statique faisant appel à des attributs et méthodes statiques ne devrait pas être boulée par le compilateur
Bonne journée
Luc
Les 3 plus grands mensonges du dev ? La doc sera faite plus tard... Le programme n'a aucun bug... Les spécifs sont finies...
Un peuple sacrifiant sa liberté pour plus de sécurité perd les deux.
Je me pointe là comme une fleur sans être certain de ce que je dis...
Est-il possible de déclarer les attributs et les méthodes utilisés dans le main (A et calcul() pour les citer) comme étant des statiques ? La déclaration d'une méthode statique faisant appel à des attributs et méthodes statiques ne devrait pas être boulée par le compilateur
Bonne journée
Luc
Les 3 plus grands mensonges du dev ? La doc sera faite plus tard... Le programme n'a aucun bug... Les spécifs sont finies...
Un peuple sacrifiant sa liberté pour plus de sécurité perd les deux.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
25 févr. 2017 à 11:43
25 févr. 2017 à 11:43
Non,
On peut créer dans type locaux, qui pourront avoir des méthodes, ces méthodes doivent être inline et en aucun cas statiques ou virtuelles. De même les données membres des type locaux ne peuvent pas être statiques.
On peut créer dans type locaux, qui pourront avoir des méthodes, ces méthodes doivent être inline et en aucun cas statiques ou virtuelles. De même les données membres des type locaux ne peuvent pas être statiques.