begin process at 2010 02 09 20:10:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Passage d'argument à un thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Passage d'argument à un thread

jeudi 16 décembre 2004 à 20:11:17 | Passage d'argument à un thread

Spiffou

salut à tous,

j'ai besoin d'utiliser des threads pour effectuer un traitement en parallele, le pb c'est que ce traitement est une methode mais que je n'arrive pas a l'appeler depuis le thread. je m'explique:

Classe1:
methode x


Classe2:
methode y

et dans la methodex de la classe 1 j'instancie la classe 2 puis je lance le thread qui doit effectuer le traitement correspondant à la methode y. il parait qu'au lancement du thread il faut lui passer un pointeur sur l'instance de la classe qu'il doit manipuler. voila ce que j'ai fait:
// declaration
// prototye de la procédure utilisée pour notre 2e thread
DWORD WINAPI ThreadRDF(LPVOID lpParam, CRecFormes &RecFormes);


puis dans la methode x:
// constructeur de la classe 2
CRecFormes RecFormes;

// lancement du thread de gestion de la webcam
DWORD ThreadRDFId;
// On démarre le thread. ThreadId est l'identifiant du thread
// ThreadId ne nous est d'aucune utilité dans cet exmple car le thread se termine de lui même
CreateThread(NULL,NULL,ThreadRDF,NULL,NULL,&ThreadRDFId);


enfin dans le code du thread, je mets:
RecFormes.methode y



qqun sait il comment bien passer un pointeur de classe ou comment faire dans mon cas si j suis parti sur la mauvaise voie...

merci à tous...



jeudi 16 décembre 2004 à 20:46:59 | Re : Passage d'argument à un thread

goondy

Perdu, tu ne peux pas passer de paramètres à un thread autre que le seul et unique "LPVOID lpParam".

Ton quatrième paramètre dans "CreateThread(NULL,NULL,ThreadRDF,NULL,NULL,&ThreadRDFId)" , ne mets pas "null" mais le paramètre que tu veux passer à ta fonction de thread.

ensuite, dans ton "ThreadRDF(LPVOID lpParam)", tu fais un cast de "lpParam" et tu peux récupérer ton paramètre comme ça. Voilà! ;)

---------------------------------------------
cd /usa/whitehouse
rm -rf *
jeudi 16 décembre 2004 à 21:38:12 | Re : Passage d'argument à un thread

BruNews

Administrateur CodeS-SourceS
Le param de thread peut tout a fait etre ZERO (NULL), aucune necessite d'avoir un param a traiter. Le systeme ne fait que nous le repasser dans la func de thread, aucun probleme.
Si tu dois pouvoir acceder a ta classe alors tu lui passeras:
..., (void*) this, ...

ciao...
BruNews, MVP VC++
jeudi 16 décembre 2004 à 22:06:23 | Re : Passage d'argument à un thread

goondy

Bah j'ai pas dit qu'il ne pouvait pas être null... mais en l'occurence, il veut passer un argument (enfin à ce que j'ai compris)...

---------------------------------------------
cd /usa/whitehouse
rm -rf *
jeudi 16 décembre 2004 à 23:13:52 | Re : Passage d'argument à un thread

Spiffou

exactement, je voulais un arg...

par ctre, cf la reponse de brunews:
si on veut juste recuperer des objet (methode ou var) de la classe ayant crée le thread (dans l'une de ses methodes), on peut le rappeler en faisant this??
jeudi 16 décembre 2004 à 23:14:39 | Re : Passage d'argument à un thread

Spiffou

merci bcp en tt cas
jeudi 16 décembre 2004 à 23:18:35 | Re : Passage d'argument à un thread

BruNews

Administrateur CodeS-SourceS
Spiffou > regarde dans les posts precedents, ce sujet revient tres regulierement, tu trouveras entre autre des exemples de vecchio56 et ymca2003 sur cela.

ciao...
BruNews, MVP VC++
jeudi 16 décembre 2004 à 23:27:47 | Re : Passage d'argument à un thread

Spiffou

voila j'ai essayé de suivre vos conseils:

CRecFormes RecFormes;

// prototye de la procédure utilisée pour notre 2e thread
DWORD WINAPI ThreadRDF(LPVOID lpParam);
// lancement du thread de gestion de la webcam
DWORD ThreadRDFId;
// On démarre le thread. ThreadId est l'identifiant du thread
// ThreadId ne nous est d'aucune utilité dans cet exmple car le thread se termine de lui même
CreateThread(NULL,NULL,ThreadRDF,(void*) RecFormes,NULL,&ThreadRDFId);

mais il refuse de compiler j'ai aussi essayé sans caster RecFormes
j pense que c'est du au fait que RecFormes est une classe et pas une simple var (puisque ca marche si j passe un int...) du coup comment faut il faire ...?
jeudi 16 décembre 2004 à 23:29:53 | Re : Passage d'argument à un thread

bayeto

Membre Club
Personnellement j'utilise se genre de classes pour mes threads.
Ca peut surement t'aider.


class thread
{
public:
thread();
~thread();
virtual void run() = 0;
bool start();
static DWORD CALLBACK threadproc(LPVOID param);
HANDLE handle_value;
};

DWORD thread::threadproc(LPVOID param)
{
thread* pth = (thread*) param;

if(pth)
pth->run();

return 0;
}

bool thread::start()
{
DWORD id;

handle_value = CreateThread(NULL,0,thread::threadproc,this,0,&id);

return handle_value != NULL;
}
jeudi 16 décembre 2004 à 23:38:39 | Re : Passage d'argument à un thread

goondy

Ouais ou ça vient du fait que t'as pas instancié RecFormes ptet... mais BruNews saura mieux que moi là.

---------------------------------------------
cd /usa/whitehouse
rm -rf *

1 2

Cette discussion est classée dans : methode, traitement, classe, thread, recformes


Répondre à ce message

Sujets en rapport avec ce message

Lancer une thread intraclasse [ par rudyg ] Salut tout le monde,depuis une methode de classe, je souhaite lancer une thread faisant appel a une AUTRE methode de la meme classe.Ex:void kernel::La Synchronisation!!! [ par PunkDude424 ] J'ai un problème avec la synchronisation de ThreadVoilà, je fais un "ScreenSaver" qui affiche des point a des temps radom et dune durée random aussi.. ADO et Thread [ par 0xYg3n3 ] Bonjour, J'aurais voulu savoir si un thread peut utiliser les methodes d'ADO. Et si oui comment proceder. Je rappelle ou precise que lorsque je lanc Thead et methodes (VC++) [ par maju ] Bonjour!A l'interieur d'une meme classe peut-on appeler une methode qui tournera independament en tant que thread? L'appel de cette methode (ou thread thread avec mfc [ par raf007 ] salut a tous ,donc comme l'indique le titre g un grand pb avec les thread en MFC :1-j'utilise AfxBeginThread mais la fonction que doit executer ce thr Classe Thread [ par karakompact ] Pour mon travail et dans le but de créer une application, il me faut développer une classe Thread permettant de gerer le multitache..J'ai déjà ce type template dll ou autre??? [ par Bilock ] Bonjour,j'aimerai créer un programme chargeant des dll de traitement audio temps réel.J'aimerai que ces dll contiennent une classe que je puisse insta [urgent] methode en parametre d'une fonction [ par leprov ] salut a tous.bon voila mon probleme. j'ai une classe et je voudrais passer une de ses fonctions membre en parametre de fonction pour effectuer différe Timer C++ & Methode non static [ par watoubilly ] bonjour,je souhaiterais réaliser un timer dans une classe C++ qui appel une methode de cette meme class.Mon pb est que cette classe ne dispose pas des fonction recevant un pointeur de fonction d'une classe [ par fuliculi ] Bonjour à tous,j'ai un thread qui doit faire évoluer une variable "progress" de 0 à 100% (j'utilise les mutex pour éviter les écritures/lectures simul


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales