Thread en visual C++

blueburry Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 22 mai 2006 - 20 juil. 2005 à 15:08
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 20 juil. 2005 à 20:15
Bonjour a tous,
je voudrais savoir comment on peut programmer un thread en visual C++.

Je sais par exemple k'en java il faut implementer l'interface Runnable et definir la fonction run(). En visual C++ ke dois-je faire pour dire qu'une classe est un thread?

Merci pour vos reponses.

3 réponses

cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
20 juil. 2005 à 16:23
Il faut declarer une fonction dans le meme genre. Si tu fait sa avec des api win32, il faut rajouter DWORD WINAPI nom_de_fonction ( LPVOID param), creer un handle pour ton thread, un id et le lancer avec la fonction CreateThread.
Petit exemple :
tu veux qu'une fonction qui s'appelle fCoucou soit un thread :

// declaration des identifiants pour ton thread
HANDLE Thread_fCoucou;
DWORD ID_fCoucou;

// prototype de la fonction
DWORD WINAPI fCoucou (LPVOID param);

// lancement du thread
Thread_fCoucou = CreateThread(NULL, NULL, fCoucou, 0, &ID_fCoucou);

// pour fermer ton thread
TerminateThread(Thread_fCoucou, ID_fCoucou);

Voila pour les grandes lignes. Sinon va voir sur http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createthread.asp pour la fonction CreateThread et sinon
http://www.cppfrance.com/code.aspx?ID=28177 qui est tres interressant pour voir le fonctionnement de tout ça.
En esperant avoir repondu a ta question

@++ et bonne prog !!

"Avant même de fonctionner, tout programme est déjà obsolète."
0
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
20 juil. 2005 à 18:55
Petite erreur de ma part :
c'est pas

// lancement du thread
Thread_fCoucou = CreateThread(NULL, NULL, fCoucou, 0, &ID_fCoucou);

mais

Thread_fCoucou = CreateThread(NULL, 0, fCoucou, 0, &ID_fCoucou);

desole ....

"Avant même de fonctionner, tout programme est déjà obsolète."
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
20 juil. 2005 à 20:15
Attention aux classes avec les APIs:
le runtime C ne sera pas au courant, donc aucune gestion aautomatique.
TerminateThread fermera le thread sans appeler de destructeur.
Fuites mémoire à prévoir.

Il convient d'utiliser _beginthreadex() pour parer à tous ces désagréments.

ciao...
BruNews, MVP VC++
0