Creation d'une tache dans un objet
Bonjour,
Je souhaite cree une tache associée à un objet (C++/GCC).
J'ai essayé de faire un appel de pthread_create dans une methode de classe particuliere du style :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| /*
* Tache de tracking des vehicules
*/
void CRadar::Tracking()
{
}
/*
* Demarrage de la tache de tracking
*/
int CRadar::StartTracking(void)
{
// Creation de la tache de tracking
if(pthread_create(&this->IDTacheTracking, NULL, (void*)this->Tracking,NULL) != 0)
{
cout << "CRadar.cpp : Echec de creation de la tache de tracking du Radar n°" << (unsigned int)this->ID << endl;
return(-1);
}
return 0;
} |
Mais je me retrouve avec des erreurs de compilation du style :
Citation:
../CRadar.cpp: In member function ‘int CRadar::StartTracking()’:
../CRadar.cpp:53: error: invalid use of member (did you forget the ‘&’ ?)
Quelqu'un aurait il une solution a cette problematique ?
Merci pour votre aide.
Toujours en erreur de compil sous Gcc
Je reste toujours en erreur de compil, je ne comprends pas pourquoi !!!
.h :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class CRadar
{
public:
// Methodes publiques
CRadar(unsigned char,float,float,const char *);
virtual ~CRadar();
void* Tracking(void* );
int StartTracking(void);
private:
// Membres prives
unsigned char ID;
float Hauteur;
float Angle;
CPort Port;
pthread_t *IDTacheTracking;
}; |
.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include <iostream>
#include <pthread.h>
#include "CRadar.h"
using namespace std;
/*
* Creation du radar
*/
CRadar::CRadar(unsigned char ident,float hauteur,float angle,const char *NomPortSerie)
{
int Ret;
// Affectation des donnees d'initialisation
this->ID = ident;
this->Hauteur = hauteur;
this->Angle = angle;
cout << "CRadar.cpp : Création du Radar n°" << (unsigned int)this->ID << " sur " << NomPortSerie << endl;
// Ouverture du port serie associe
Ret = Port.Ouverture(NomPortSerie);
}
/*
* Destrution de l'objet radar
*/
CRadar::~CRadar()
{
cout << "CRadar.cpp : Destruction du Radar n°" << (unsigned int)this->ID << endl;
// Fermeture du port serie associe
Port.Fermeture();
}
/*
* Tache de tracking des vehicules
*/
void* CRadar::Tracking(void* arg)
{
}
/*
* Demarrage de la tache de tracking
*/
int CRadar::StartTracking(void)
{
// Creation de la tache de tracking
pthread_create(IDTacheTracking, NULL, Tracking, NULL);
return 0;
} |
Erreur :
make all
Building file: ../CRadar.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"CRadar.d" -MT"CRadar.d" -o"CRadar.o" "../CRadar.cpp"
../CRadar.cpp: In member function ‘void* CRadar::Tracking(void*)’:
../CRadar.cpp:46: warning: no return statement in function returning non-void
../CRadar.cpp: In member function ‘int CRadar::StartTracking()’:
../CRadar.cpp:54: error: argument of type ‘void* (CRadar::)(void*)’ does not match ‘void* (*)(void*)’
make: *** [CRadar.o] Erreur 1
Quel est le souci ???