begin process at 2012 05 30 10:37:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

utilisation des threads


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

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,250 sec (3)

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