Accueil > Forum > > > > utilisation des threads
utilisation des threads
dimanche 9 mai 2004 à 16:27:10 |
utilisation des threads

JRB
|
j'essaie d'apprendre à utiliser les threads mais malgres toutes les sources que je trouve sur le net j'ai toujours du mal à comprendre leur fonctionnement. A la base ce que je voulais c faire un programme qui fait deux choses a la fois ; par exemple une fonction qui fait un test et qui tourne en boucle, et a cote que le programme puisse continuer a s'executer meme pendant l'execution de la boucle. voici mon code : #include <stdio.h> #include <process.h> #include <windows.h>
void TonThread();
void main() { HANDLE hThread = 0;
hThread=CreateThread( NULL, 0, Sample_TonThread, NULL, 0, &dThreadId);
if (hThread != 1 ) { WaitForSingleObject(hThread); CloseHandle(hThread); } int f; if (f == 5) printf("\nf = 5"); scanf("%d",&f); }
void TonThread(int f) { for (f = 0 ; f < 10 ; f++) { printf("\nf : "); scanf("%d",&f); } }
|
je voulais isoler la boucle pour que, lorsqu'elle est utiliser le programme puisse continuer le traitement. ce code ne marche pas, il est rempli d'erreur mais j'ai trouve plein de code sur internet et comme aucun ne dit la meme chose je ne sais plus a quoi me fier. pouvez vous me dire comment gerer plusieurs threads et comment les appeler a differents moments. Je n'ai pas tres bien compris comment on les initialise car j'ai trouve plusieurs façon de le faire. HANDLE hThread = 0;
hThread=CreateThread( NULL, 0, Sample_TonThread, NULL, 0, &dThreadId);
|
Sur plusieurs documents j'ai entendu parler du "handle du thread" , mais en fait je ne sais pas ce qu'est le handle et aussi a quoi sert la premiere ligne. je n'ai pas vu egalement dans les sources que j'ai trouve comment on faisait pour appeler les threads et comment on les lançaient, ou je n'ai pas compris le code. si vous pouviez m'expliquer ces differents points ce serai super sympa.
|
|
dimanche 9 mai 2004 à 21:53:32 |
Re : utilisation des threads

cosmobob
|
le handle du thread sert a l'identifier. si tu fais WaitForSingleObject(hThread,INFINITE); (dans le corps du programme ou t'as lancé le thread avec createthread), tu attends ke ce thread soit fini pour passer a la suite (la fonction bloque). si tu t'en fous d'attendre le thread que tu lances voila comment faire : #include <windows.h> #include <stdio.h>
DWORD WINAPI TonThread(LPVOID param);
void main() { DWORD dThreadId; // sert d'endroit ou createthread va stocker une valeur
// On creer le thread qui va lancer la fonctio TonThread CreateThread( NULL, 0, TonThread, (LPVOID)57, 0, &dThreadId); // Le 4e parametre est censé etre un pointeur vers // le parametre de la fonction TonThread.
int g; for (g = 0; g < 10; g++) { Sleep(5100); // on attend 5.1 secondes. printf("g vaut : %d\n",g); } system("pause"); }
// Une fonction thread doit forcement etre de ce type // Retourner un DWORD WINAPI // et avoir un parametre de type LPVOID (pointeur sur n'importe quoi) DWORD WINAPI TonThread(LPVOID param) { int f = (int) param; printf("le parametre de TonThread est : %d \n",f); for (f = 0 ; f < 10 ; f++) { printf("f vaut : %d\n",f); Sleep(5000); // on attend 5 secondes. } // Le thread est obligé de retourner quelque chose // (un DWORD (cad un entier de 32 bits)) return 0; }
|
et voila ! bon si t'as pas compris, explique ce que t'as pas pigé a+ ;)
|
|
mardi 11 mai 2004 à 02:12:51 |
Re : utilisation des threads

neohp
|
autre solution :
si tu prefere la simplicité des threads UNIX ,( les pthreads ), tu peux les utilisers : des programmeur on cree une librairie qui permet des crée des pthread exactement comme sur les sytemes unix... sa se trouve un peu partout sur le net, mais je crois que officielement sa vient de chez redhat
rdv donc sur le site de la redhat linux .....
bonne prog '
++
neoh_p [=- coding spirit -=] ------- since 1999 ------
|
|
samedi 15 mai 2004 à 20:57:04 |
Re : utilisation des threads

JRB
|
merci pour vos reponses. j'ai un peu mieux compris le fonctionnement mais il reste encore quelques flous. si j'ai bien compris la ligne : CreateThread( NULL, 0, TonThread, (LPVOID)57, 0, &dThreadId);
|
sert a appeller le morceau de programe plus bas : DWORD WINAPI TonThread(LPVOID param) { int f = (int) param; printf("le parametre de TonThread est : %d \n",f); for (f = 0 ; f < 10 ; f++) { printf("f vaut : %d\n",f); Sleep(5000); // on attend 5 secondes. } // Le thread est obligé de retourner quelque chose // (un DWORD (cad un entier de 32 bits)) return 0; }
|
donc en fait ce code s'execute en premiers dans ce programme? je ne me rappelle plus a quoi correspond le dernier parametre de CreateThread, j'avais trouve un site qui explique bien mais mon disque dur est mort et j'ai tout perdu et je ne le retrouve pas, est ce que vous pouvez m'eclairer ? j'ai esseyer de compiler cette source sous visual studio 6.0 mais il me met une erreur : c:\logiciel\microsoft visual studio\myprojects\threads\stdafx.cpp(42) : error C2857: '#include' statement specified with the /Ycstdafx.h command-line option was not found in the source file
|
je n'arrive pas à la corriger est ce que vous pouvez m'aider ?
|
|
jeudi 20 mai 2004 à 02:27:19 |
Re : utilisation des threads

cosmobob
|
'donc en fait ce code s'execute en premiers dans ce programme' ben le premier truc qui est exécuté dans ton programme, c'est le code de la fonction main. au moment dans le main où on va rencontrer CreateThread, Windows va lancer en parallele l'execution de la fonction TonThread, mais le code du main continue aussi à s'exécuter. le dernier parametre de CreateThread correspond a un endroit ou l'identifiant du thread va etre stocké (pointeur vers un DWORD).
pour ce qui est de ton erreur, je te conseille de recreer un projet de type 'an empty win32 application' et la t'ajoutes manuellement les fichiers dont t'as besoin (yora pu le stdafx.h).
a++
|
|
dimanche 23 mai 2004 à 21:04:37 |
Re : utilisation des threads

JRB
|
merci pour ta reponse .
si je veux faire plusieurs threads (comme par exemple un chat multiclient) est ce que je peux utiliser un seul est meme threads et l'appeller plusieurs fois dans mon programme et si oui est ce qu'il faut modifier le pointeur : (LPVOID)57 ou utiliser une autre methode ?
|
|
lundi 24 mai 2004 à 00:44:42 |
Re : utilisation des threads

cosmobob
|
si tu veux lancer par exemple 2 threads mais que la fonction qui va etre executé par les 2 threads est la meme, et elle s'apelle fonctiontest :
DWORD dThreadId; CreateThread( NULL, 0, fonctiontest, (LPVOID)57, 0, &dThreadId); CreateThread( NULL, 0, fonctiontest, (LPVOID)57, 0, &dThreadId);
ta fonction fonctiontest doit etre du type : DWORD WINAPI fonctiontest(LPVOID lpparemeter) {
//nimporte koi
return 0; }
le LPVOID 57 dans createThread était un exemple : cela correspond au parametre qui va etre passé a la fonction fonctiontest dans le thread qui va etre crée.
si ta fonction est : DWORD WINAPI fonctiontest(LPVOID lpparemeter) { printf("le parametre vaut : %d\n",lpparameter); //nimporte koi
return 0; }
tu va voir : le parametre vaut 57 le parametre vaut 57
(2 fois car tu as lancé cette fonction dans 2 threads, et a chak fois tu as passé 57 comme parametre a la fonction tontest)
dans ce que tu as dit, tu as confondu le thread et la fonction qui est appelé des que le thread commence : les threads sont différents (cad ils s'executent en parallele) mais ils executent tous les 2 ici la meme fonction (fonctiontest)
donc si tu veu faire un chat multiclient, il te suffit de lancer plusieurs thread (donc plusieurs appels a CreateThread) qui vont chacun executer la fonction de client.
voila je sais pas si j'ai été clair, mais bon... a+ ;)
|
|
lundi 6 décembre 2004 à 13:08:25 |
Re : utilisation des threads

Tidam
|
Thx a tous pour ce post il explique tres bien le fonctionnement des Thread :p moi ca va bien me servir en tout cas ++
|
|
jeudi 20 janvier 2005 à 01:13:11 |
Re : utilisation des threads

Cow_B
|
1 seul mot pour tout ces posts :
MERKI !!!!!!!!!!!!!!!!!!!!!!!!!     Cow-B ----------------------------------------------- C'est au pied du mur.... qu'on voit le mieux le mur -----------------------------------------------
|
|
Cette discussion est classée dans : code, trouve, threads, hthread, tonthread
Répondre à ce message
Sujets en rapport avec ce message
à propos des threads [ par GUERRIER_ABSOLU ]
Salut, je voudrais savoir s'i quelqu'un a déjà essayé d'appeler une fonction dans un thread et a remarqué quelque chose d'innatendu. En fait quand j'a
Il est ou le code ? [ par lamoueste ]
bonjour a tous :) j'ai un petit souci j'ai creer un nouveau projet avec une mainframe et la toolbar qui va avec mais je n'arrive pas a savoir ou se tr
threads c pur windows [ par Moomoon07 ]
Bonjour,Je crée un code que je compile en une librairie statique (.lib) avant de le linker avec un programme c pur autogénéré.Je travaille sous window
de C vers C++ ? [ par boualiasma ]
Salut, J'ai crée mon programme C sous Windows avec Visaul Studio 2008. Lorsque j'ajoute un fichier alors je trouve un fichier c++. Mais, je mis par e
Problème/Question Threads mélangés avec Exceptions [ par HeXoR ]
Bonjour, mon problème est le suivant : j'ai une classe qui contient une méthode lancée plusieurs fois en parallèle grâce aux threads (j'utilise Create
Problème tempo et Threads!!!! [ par Tank01 ]
onjour,Je code en ce moment un petit programme en mode console, avec devc++.Dans ce programme, je souhaiterais qu'il y est un petit texte qui clignote
Terminer un thread [ par vecchio56 ]
RebonjourJ'ai crée un thread de la manière suivante:HANDLE hThread = CreateThread(0, 0, ThreadProc, &ts, 0, &dwThreadId);et je
API MSN. [ par trashaccount ]
Bonjour à tous,Je fait appel à vous, afin d'obtenir plus amples informations sur l'utilisation de l'api msn.J'aimerais bien tenter de developper quelq
Probleme affichage fenetre Win32 [ par fredsor ]
Salut a tous,Voila j'ai un probleme qui n'est un probleme de code mais un probleme plus en relation avec des librairies ou des parametres Windows, enf
Ptite colle sur un algo [ par Trimard84 ]
Bonjour, recemment on m'a posé une colle sur ce qu'il parait etre un algorithme et je n'arrive pas a m'en sortir c'est pourquoi je viens poster ici, e
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|