Bonjour,

Je souhaiterais savoir comment utiliser les pthread pour appeler une fonction membre de ma classe.

Voici schematiquement ce que je voudrais faire:


.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <pthread.h>
 
struct pthread_data
{
  double a;
  double b;
  double c;
}
class MyClass
{
  void anotherMemberFunction();
  void memberFunctionToCall(double a, double b, double c);
 
  static void *threadHandler(void *args);
 
  struct pthread_data m_threads[2];
}
.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "MyClass.h"
void MyClass::anotherMemberFunction()
{
  ...
  iret1 = pthread_create( &thread1, NULL, MyClass::threadHandler,
						(void*) &m_threads[1]);
  iret2 = pthread_create( &thread1, NULL, MyClass::threadHandler,
						(void*) &m_threads[2]);
  ...
}
 
void *MyClass::threadHandler(void *args)
{
  struct pthread_data *data;
  data = (struct pthread_data*) args;
 
  memberFunctionToCall(data->a, data->b, data->c);
}
J'obtiens l'erreur suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
erreur: cannot call member function ‘void MyClass::memberFunctionToCall(double&, double&, double&)’ without object
J'insiste sur le fait que je souhaite appeler la function "memberFunctionToCall" avec l'objet courant (et toutes les valeurs de ses membres au moment de l'appel) et donc éviter toute solution qui créerait un objet juste pour effetuer l'appel, du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
void handler(void *args)
{
 MyClass c;
 c.memberFunctionToCall(...);
}
Merci de votre aide.