Classes et multi thread sur méthodes non statiques
jktln
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voici le code c++ :
public class A{
public:
A(int _champ1, int _champ2) : champ1(_champ1), champ2(_champ2) {}
void calcul(){Fait un calcul relativement long}
private:
int champ1, champ2;
}
int main(){
A a1 = new A(0, 0);
A a2 = new A(1, 1);
pthread p1;
pthread p2;
pthread_create(&p1, NULL, &a1->calcul(), NULL);
pthread_create(&p2, NULL, &a2->calcul(), NULL);
//Réccupération & Analyse des résultats de "calcul" qui ne pose pas de pb particulier
}
Vous l'aurez compris, je veux que a1->calcul() et a2->calcul() s'exécutent en parallèle. Je ne peux pas rendre la méthode calcul() statique car elle a besoin de paramètres propre à l'objet pour fonctionner.
Y aurait-il un moyen de faire ça ?
En l'état, je me fais insulter par le compilateur qui me dit que je n'ai pas le droit de mettre une méthode non statique dans mon thread.
Merci !
Voici le code c++ :
public class A{
public:
A(int _champ1, int _champ2) : champ1(_champ1), champ2(_champ2) {}
void calcul(){Fait un calcul relativement long}
private:
int champ1, champ2;
}
int main(){
A a1 = new A(0, 0);
A a2 = new A(1, 1);
pthread p1;
pthread p2;
pthread_create(&p1, NULL, &a1->calcul(), NULL);
pthread_create(&p2, NULL, &a2->calcul(), NULL);
//Réccupération & Analyse des résultats de "calcul" qui ne pose pas de pb particulier
}
Vous l'aurez compris, je veux que a1->calcul() et a2->calcul() s'exécutent en parallèle. Je ne peux pas rendre la méthode calcul() statique car elle a besoin de paramètres propre à l'objet pour fonctionner.
Y aurait-il un moyen de faire ça ?
En l'état, je me fais insulter par le compilateur qui me dit que je n'ai pas le droit de mettre une méthode non statique dans mon thread.
Merci !
A voir également:
- Classes et multi thread sur méthodes non statiques
- Youtube multi downloader - Télécharger - Conversion & Codecs
- Sfr multi - Accueil - Opérateurs & Forfaits
- Multi boot windows - Guide
- Multi exp pokemon heartgold - Forum Pokémon
- Multi exp pokemon diamant - Forum Jeux vidéo
2 réponses
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.
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.