Accueil > > > QUELQUES EXEMPLES D'UTILIISATION DES THREADS
QUELQUES EXEMPLES D'UTILIISATION DES THREADS
Information sur la source
Description
ce petit programme ne fait rien d'extraordinaire sauf qu'il montre différentes utilisation des threads, elle se base sur la classe "Mythread". Parmi les différents thread on trouve: -des threads qui calculent les coordonnées d'une balle dans une fenetre. -des threads qui possèdent leur propre fenetre et qui affiche des balles dont les coordonnées st calculé par les thread ci-dessus. -un thread qui possèdent une fenêtre caché pour intercepter les messages windows. cet exemple met en oeuvre un thread qui est le serveur et accept un seul client et lui envoye des messages à intervalle de tps régulier, et le thread client qui possède la fenetre caché attend les message du système lui précisant qu'il doit lire sur le socket client par le biais du mécanisme "WSAAsyncSelect". Ce code est destiné à ceux qui ont quelques souci avec les threads. Si vous avez des questions n'hésitez pas à les poster.
Source
- Structure.h
- #ifndef StructuredH
- #define StructureH
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #include <windows.h>
- #pragma comment(lib,"ws2_32.lib")
-
- /*
- la classe MyThread encapsule un thread et nous permet de l'utilisé le
- plus simplement du monde.cette classe peut etre la classe de base à toute
- autre objet thread et facilitera l'accés aux focntions et aux données membre
- ,il suffira juste de surcharger la methode Run;
-
- */
- class MyThread
- {
- private :
- HANDLE ThreadHandle;
- DWORD ThreadID;
-
- bool Suspendu;
-
- public :
-
- bool IsRunning;
- MyThread(bool);
- ~MyThread();
- virtual void Run (void);
- void Demarrer(void);
- void Reprendre(void);
- void Suspendre(void);
- void Terminer(void);
- void SetPriority(int);
- HANDLE GetHandle(void);
- DWORD GetThreadID(void);
-
-
- } ;
-
- #endif
-
-
- Structure.cpp
- #include "Structure.h"
-
- /*
- la fonction ThreadProc est la fonction exécution par tout thread héritant de MyThread.
- il peut ya avoir autant de thread que peut supporter le système.
-
- */
- DWORD WINAPI ThreadProc(LPVOID lparam)
- {
- MyThread*gthread=(MyThread*)lparam;//cast pour recuperer l'objet
- gthread->Run();/*execution de la methode Run de notre objet mythread ,
- c'est pour cela qu'il faut écrire le code à éxecuter dans la fonction Run
- */
- return 0;
- }
-
- MyThread::MyThread( bool EnSuspens)
- {
- ThreadHandle=NULL;
- ThreadID=0;
- IsRunning=false;
- Suspendu=false;
- if(!EnSuspens) //creation du thread et lancement direct
- { ThreadHandle=CreateThread(NULL,
- NULL,
- ThreadProc,//fonction que devra executer le thread
- (void*)this,//paramètre que l'on passe au thread, ici c'est l'adresse mémoire de MyThread
- 0, //mode de creation du thread, ici 0 equivaut à une execution immédiat
- &ThreadID);//l'identifiant du thread crée
- Suspendu=false;
- }
- else
- {ThreadHandle=CreateThread(NULL,NULL //creation du thread en mode suspendu
- ,ThreadProc,(void*)this,CREATE_SUSPENDED,&ThreadID);
- Suspendu=true;
- }
- if(ThreadHandle!=NULL)
- IsRunning=true;
-
- }
-
-
- void MyThread::Terminer(void)
- {
- TerminateThread( ThreadHandle,0);/*methode pour terminer brutalement le thread ,
- qu'il est terminé sont exécution ou non.
- ya d'autre méthodes plus soft pour arreter un thread
- notamment un fonction de test dans la boucle Run de l'objet héritant de MyThread,
- déterminant si on doit sortir du Run ou pas.
- */
-
- IsRunning=false;
- }
- /*
- Une fois qu'on possède un Handle et un identifiant valide pour les threads
- on peut exécuter les API pour modifié notre thread
- tel que les méthodes qui suivent.
-
- */
-
- void MyThread::Demarrer(void)
- {
- if((!IsRunning)||(!Suspendu))
- return ;
- ResumeThread(ThreadHandle);
- Suspendu=false;
- }
-
-
- void MyThread::Reprendre(void)
- {
- Demarrer();
- }
-
- void MyThread::Suspendre(void)
- {
- if((!IsRunning)||(Suspendu))
- return ;
- SuspendThread(ThreadHandle);
- Suspendu=true;
- }
-
- void MyThread::Run(void)
- {
-
- }
-
- void MyThread::SetPriority(int priority)
- {
- if(ThreadHandle!=NULL)
- SetThreadPriority(ThreadHandle,priority);
-
- }
-
- HANDLE MyThread::GetHandle(void)
- {
- return ThreadHandle;
- }
-
- DWORD MyThread::GetThreadID(void)
- {
- return ThreadID;
- }
-
- MyThread::~MyThread()
- {
- if(IsRunning)
- Terminer();
- if(ThreadHandle!=NULL)
- CloseHandle(ThreadHandle);
- ThreadHandle=NULL;
- }
Structure.h
#ifndef StructuredH
#define StructureH
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
/*
la classe MyThread encapsule un thread et nous permet de l'utilisé le
plus simplement du monde.cette classe peut etre la classe de base à toute
autre objet thread et facilitera l'accés aux focntions et aux données membre
,il suffira juste de surcharger la methode Run;
*/
class MyThread
{
private :
HANDLE ThreadHandle;
DWORD ThreadID;
bool Suspendu;
public :
bool IsRunning;
MyThread(bool);
~MyThread();
virtual void Run (void);
void Demarrer(void);
void Reprendre(void);
void Suspendre(void);
void Terminer(void);
void SetPriority(int);
HANDLE GetHandle(void);
DWORD GetThreadID(void);
} ;
#endif
Structure.cpp
#include "Structure.h"
/*
la fonction ThreadProc est la fonction exécution par tout thread héritant de MyThread.
il peut ya avoir autant de thread que peut supporter le système.
*/
DWORD WINAPI ThreadProc(LPVOID lparam)
{
MyThread*gthread=(MyThread*)lparam;//cast pour recuperer l'objet
gthread->Run();/*execution de la methode Run de notre objet mythread ,
c'est pour cela qu'il faut écrire le code à éxecuter dans la fonction Run
*/
return 0;
}
MyThread::MyThread( bool EnSuspens)
{
ThreadHandle=NULL;
ThreadID=0;
IsRunning=false;
Suspendu=false;
if(!EnSuspens) //creation du thread et lancement direct
{ ThreadHandle=CreateThread(NULL,
NULL,
ThreadProc,//fonction que devra executer le thread
(void*)this,//paramètre que l'on passe au thread, ici c'est l'adresse mémoire de MyThread
0, //mode de creation du thread, ici 0 equivaut à une execution immédiat
&ThreadID);//l'identifiant du thread crée
Suspendu=false;
}
else
{ThreadHandle=CreateThread(NULL,NULL //creation du thread en mode suspendu
,ThreadProc,(void*)this,CREATE_SUSPENDED,&ThreadID);
Suspendu=true;
}
if(ThreadHandle!=NULL)
IsRunning=true;
}
void MyThread::Terminer(void)
{
TerminateThread( ThreadHandle,0);/*methode pour terminer brutalement le thread ,
qu'il est terminé sont exécution ou non.
ya d'autre méthodes plus soft pour arreter un thread
notamment un fonction de test dans la boucle Run de l'objet héritant de MyThread,
déterminant si on doit sortir du Run ou pas.
*/
IsRunning=false;
}
/*
Une fois qu'on possède un Handle et un identifiant valide pour les threads
on peut exécuter les API pour modifié notre thread
tel que les méthodes qui suivent.
*/
void MyThread::Demarrer(void)
{
if((!IsRunning)||(!Suspendu))
return ;
ResumeThread(ThreadHandle);
Suspendu=false;
}
void MyThread::Reprendre(void)
{
Demarrer();
}
void MyThread::Suspendre(void)
{
if((!IsRunning)||(Suspendu))
return ;
SuspendThread(ThreadHandle);
Suspendu=true;
}
void MyThread::Run(void)
{
}
void MyThread::SetPriority(int priority)
{
if(ThreadHandle!=NULL)
SetThreadPriority(ThreadHandle,priority);
}
HANDLE MyThread::GetHandle(void)
{
return ThreadHandle;
}
DWORD MyThread::GetThreadID(void)
{
return ThreadID;
}
MyThread::~MyThread()
{
if(IsRunning)
Terminer();
if(ThreadHandle!=NULL)
CloseHandle(ThreadHandle);
ThreadHandle=NULL;
}
Historique
- 12 décembre 2008 19:59:10 :
- v
- 13 décembre 2008 13:36:48 :
- v
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Thread dans une dll [ par angel ]
Est-il possible de créer un thread dans une dll ?
Controler une ListBox avec un thread [ par header ]
Apres avoir creer et appeler ma fct thread j'aimerai controler une listbox.(ou un autre controle)Comment je dois faire ???Comment attacher une variabl
Pointeur sur methodes avec parametre [ par Kinamstrong ]
Salut a toi,Je cherche à savoir comment marche les pointeurs sur les methodes avec parametres.Qu'est ce qui va differencier deux meme methodes en cour
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
Thread [ par Vince007 ]
Bonjour, je vous laisse se message pour savoir si qqu'un qui connait bien les thread et les sémaphores sous Linux pourrait m'indiquer la méthode de co
thread et librairies [ par galamor ]
salut, je débute sur visual C++j'aimerai savoir si quelqu'un pourrait me dire où trouver des informations précises et/ou des exemples sur l'utilisatio
terminer un thread [ par galamor ]
salut,j'aimerai savoir quels sont les moyens les plus utilisés (traduire : les plus performants et les plus simples) pour dire à une thread de s'arrét
J'veux dire qqch amon programme...HELP !!! [ par lutin ]
Oui en fait, j'aimerais savoir si qqun peux m'aider dans l'utilisation des messages windows.J'explique : je crée une fenetre qui lance un threaddans m
Thread?!? [ par couriousous ]
Hello!Ma question est bête mais je la pose:Quesque c'est un Thread (une sorte processus pour avoir + de temp processeur) et comment en créer un en C++
multitache [ par nigloudouille ]
Je souhaite faire du multitaches sous MFC afin que mon programme ne reste pas bloqué pendant un calcul. j'ai bien réussi à créer une nouvelle thread d
|
Derniers Blogs
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 REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
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
|