J'ai créé un objet, et je veux qu'une de ses méthodes s'éxécute dans un
processus séparé. Mon code ressemble à ceci:
"
class MaClasse{
private:
HANDLE Htache;
DWORD IdTache;
public:
//constructeur
MaClasse();
//Destructeur
~MaClasse();
//methode qui demarre la tache
int DemarreTache();
//methode d'execution de la tache
DWORD WINAPI ExecuteTache(LPVOID param);
};//fin de MaClasse
//-------------------
//Description des méthodes
//-------------------
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David MAREC
D'après Nicolas ROBERT:
J'ai créé un objet, et je veux qu'une de ses méthodes s'éxécute dans un processus séparé. Mon code ressemble à ceci:
class MaClasse{
private: HANDLE Htache; DWORD IdTache;
public: MaClasse(); ~MaClasse(); int DemarreTache(); DWORD WINAPI ExecuteTache(LPVOID param);
};//fin de MaClasse
Ma question est la suivante, est-ce possible de creer une méthode du type ExecuteTache ?
Oui, et non.
D'une part, pour pouvoir définir la fonction CreateThread et ses paramètres, la fonction membre doit être statique. Ce qui fait qu'elle ne peut plus accéder à ses objets, pour y remédier, on lui passe en paramèter l'objet appelant (this).
De mémoire, -je n'ai ni doc, ni exemple sous les yeux- cela doit ressembler à ceci:
/* Declaration de la fonction membre */ static DWORD WINAPI ExecuteTache(LPVOID param);
Avec un appel sur DWORD WINAPI MaClasse::ExecuteTache(LPVOID param){ MaClasse *Moimeme = (MaClasse*)param; }
Avec this passé en paramètre dans le CreateThread.
Pour éviter de se taper tout plein de «MaClasse->», vous pouvez tout simplement réduire ExecuteThread à l'appel d'une autre fonction membre: dans .
J'ai créé un objet, et je veux qu'une de ses méthodes s'éxécute dans un
processus séparé. Mon code ressemble à ceci:
class MaClasse{
private:
HANDLE Htache;
DWORD IdTache;
public:
MaClasse();
~MaClasse();
int DemarreTache();
DWORD WINAPI ExecuteTache(LPVOID param);
};//fin de MaClasse
Ma question est la suivante, est-ce possible de creer une méthode du type
ExecuteTache ?
Oui, et non.
D'une part, pour pouvoir définir la fonction CreateThread et ses paramètres,
la fonction membre doit être statique.
Ce qui fait qu'elle ne peut plus accéder à ses objets, pour y remédier, on
lui passe en paramèter l'objet appelant (this).
De mémoire,
-je n'ai ni doc, ni exemple sous les yeux-
cela doit ressembler à ceci:
/* Declaration de la fonction membre */
static DWORD WINAPI ExecuteTache(LPVOID param);
Avec un appel sur
DWORD WINAPI MaClasse::ExecuteTache(LPVOID param){
MaClasse *Moimeme = (MaClasse*)param;
}
Avec this passé en paramètre dans le CreateThread.
Pour éviter de se taper tout plein de «MaClasse->», vous pouvez tout
simplement réduire ExecuteThread à l'appel d'une autre fonction membre:
dans .
J'ai créé un objet, et je veux qu'une de ses méthodes s'éxécute dans un processus séparé. Mon code ressemble à ceci:
class MaClasse{
private: HANDLE Htache; DWORD IdTache;
public: MaClasse(); ~MaClasse(); int DemarreTache(); DWORD WINAPI ExecuteTache(LPVOID param);
};//fin de MaClasse
Ma question est la suivante, est-ce possible de creer une méthode du type ExecuteTache ?
Oui, et non.
D'une part, pour pouvoir définir la fonction CreateThread et ses paramètres, la fonction membre doit être statique. Ce qui fait qu'elle ne peut plus accéder à ses objets, pour y remédier, on lui passe en paramèter l'objet appelant (this).
De mémoire, -je n'ai ni doc, ni exemple sous les yeux- cela doit ressembler à ceci:
/* Declaration de la fonction membre */ static DWORD WINAPI ExecuteTache(LPVOID param);
Avec un appel sur DWORD WINAPI MaClasse::ExecuteTache(LPVOID param){ MaClasse *Moimeme = (MaClasse*)param; }
Avec this passé en paramètre dans le CreateThread.
Pour éviter de se taper tout plein de «MaClasse->», vous pouvez tout simplement réduire ExecuteThread à l'appel d'une autre fonction membre: dans .
> Ma question est la suivante, est-ce possible de creer une méthode du
type
> ExecuteTache ?
Oui, et non.
D'une part, pour pouvoir définir la fonction CreateThread et ses
paramètres,
la fonction membre doit être statique. Ce qui fait qu'elle ne peut plus accéder à ses objets, pour y remédier, on lui passe en paramèter l'objet appelant (this).
De mémoire, -je n'ai ni doc, ni exemple sous les yeux- cela doit ressembler à ceci:
/* Declaration de la fonction membre */ static DWORD WINAPI ExecuteTache(LPVOID param);
Avec un appel sur DWORD WINAPI MaClasse::ExecuteTache(LPVOID param){ MaClasse *Moimeme = (MaClasse*)param; }
Avec this passé en paramètre dans le CreateThread.
Pour éviter de se taper tout plein de «MaClasse->», vous pouvez tout simplement réduire ExecuteThread à l'appel d'une autre fonction membre: dans .
Merci de vos indications. Je vais effectivement suivre vos conseils en écrivant Deux fonctions, l'une static de type DWORD WINAPI, appelant la deuxième qui contiendra le code effectif.
>
> J'ai créé un objet, et je veux qu'une de ses méthodes s'éxécute dans un
> processus séparé. Mon code ressemble à ceci:
> Ma question est la suivante, est-ce possible de creer une méthode du
type
> ExecuteTache ?
Oui, et non.
D'une part, pour pouvoir définir la fonction CreateThread et ses
paramètres,
la fonction membre doit être statique.
Ce qui fait qu'elle ne peut plus accéder à ses objets, pour y remédier, on
lui passe en paramèter l'objet appelant (this).
De mémoire,
-je n'ai ni doc, ni exemple sous les yeux-
cela doit ressembler à ceci:
/* Declaration de la fonction membre */
static DWORD WINAPI ExecuteTache(LPVOID param);
Avec un appel sur
DWORD WINAPI MaClasse::ExecuteTache(LPVOID param){
MaClasse *Moimeme = (MaClasse*)param;
}
Avec this passé en paramètre dans le CreateThread.
Pour éviter de se taper tout plein de «MaClasse->», vous pouvez tout
simplement réduire ExecuteThread à l'appel d'une autre fonction membre:
dans .
Merci de vos indications. Je vais effectivement suivre vos conseils en
écrivant Deux fonctions, l'une static de type DWORD WINAPI, appelant la
deuxième qui contiendra le code effectif.
> Ma question est la suivante, est-ce possible de creer une méthode du
type
> ExecuteTache ?
Oui, et non.
D'une part, pour pouvoir définir la fonction CreateThread et ses
paramètres,
la fonction membre doit être statique. Ce qui fait qu'elle ne peut plus accéder à ses objets, pour y remédier, on lui passe en paramèter l'objet appelant (this).
De mémoire, -je n'ai ni doc, ni exemple sous les yeux- cela doit ressembler à ceci:
/* Declaration de la fonction membre */ static DWORD WINAPI ExecuteTache(LPVOID param);
Avec un appel sur DWORD WINAPI MaClasse::ExecuteTache(LPVOID param){ MaClasse *Moimeme = (MaClasse*)param; }
Avec this passé en paramètre dans le CreateThread.
Pour éviter de se taper tout plein de «MaClasse->», vous pouvez tout simplement réduire ExecuteThread à l'appel d'une autre fonction membre: dans .
Merci de vos indications. Je vais effectivement suivre vos conseils en écrivant Deux fonctions, l'une static de type DWORD WINAPI, appelant la deuxième qui contiendra le code effectif.
Nicolas ROBERT
Merci pour les indications. J'aimerais un complément d'informations. Ma classe Maclasse est un singleton dont l'un des objectifs est de démarrer n tâches, via la méthode ExecuteTache. Mon problème réside dans l'arrêt de mon thread ExecuteTache (CloseHandle() ), que je ne peux éxécuter de la classe démarrante (DemarreTache() ). Est-ce que je peux finaliser ma tâche directement depuis ma méthode FonctionThread() comme ceci:
class MaClasse{
private: HANDLE Htache; DWORD IdTache;
public: MaClasse(); ~MaClasse(); int DemarreTache(); static DWORD WINAPI ExecuteTache(LPVOID param); //methode qui execute FonctionThread() dans un thread int FonctionThread(); //fonction qui éxécute la tache };//fin de MaClasse
Merci pour les indications.
J'aimerais un complément d'informations. Ma classe Maclasse est un singleton
dont l'un des objectifs est de démarrer n tâches, via la méthode
ExecuteTache. Mon problème réside dans l'arrêt de mon thread ExecuteTache
(CloseHandle() ), que je ne peux éxécuter de la classe démarrante
(DemarreTache() ). Est-ce que je peux finaliser ma tâche directement depuis
ma méthode FonctionThread() comme ceci:
class MaClasse{
private:
HANDLE Htache;
DWORD IdTache;
public:
MaClasse();
~MaClasse();
int DemarreTache();
static DWORD WINAPI ExecuteTache(LPVOID param); //methode qui
execute FonctionThread() dans un thread
int FonctionThread(); //fonction qui éxécute la tache
};//fin de MaClasse
Merci pour les indications. J'aimerais un complément d'informations. Ma classe Maclasse est un singleton dont l'un des objectifs est de démarrer n tâches, via la méthode ExecuteTache. Mon problème réside dans l'arrêt de mon thread ExecuteTache (CloseHandle() ), que je ne peux éxécuter de la classe démarrante (DemarreTache() ). Est-ce que je peux finaliser ma tâche directement depuis ma méthode FonctionThread() comme ceci:
class MaClasse{
private: HANDLE Htache; DWORD IdTache;
public: MaClasse(); ~MaClasse(); int DemarreTache(); static DWORD WINAPI ExecuteTache(LPVOID param); //methode qui execute FonctionThread() dans un thread int FonctionThread(); //fonction qui éxécute la tache };//fin de MaClasse