begin process at 2012 05 27 18:00:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > QUELQUES EXEMPLES D'UTILIISATION DES THREADS

QUELQUES EXEMPLES D'UTILIISATION DES THREADS


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :Thread, Message Windows, API Windows Niveau :Débutant Date de création :12/12/2008 Date de mise à jour :13/12/2008 13:36:48 Vu / téléchargé :6 077 / 397

Auteur : goodboy21

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

12 décembre 2008 19:59:10 :
v
13 décembre 2008 13:36:48 :
v

 Sources du même auteur

Source avec Zip Source avec une capture CLIENT/SERVEUR UTILISANT LES IOCP RÉALISÉ AVEC BORLAND BUILD...

 Sources de la même categorie

Source avec Zip Source avec une capture PROGRAMME DE SUDOKU par AffreuxJojp
Source avec Zip EVALUATEUR D'EXPRESSION ARITHMÉTIQUE par matrx180vTitanium
Source avec Zip Source avec une capture QBIBLIO GESTION DES PRÊTS par conatic
Source avec Zip Source avec une capture QL-CHATROOM V 1.0 par mature
Source avec Zip Source avec une capture GEOLOCALISATION par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AFFIMOFF : UNE VISIONNEUSE 3D AVEC PARAMÉTRISATION ET TEXTUR... par pgl10
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika
Source avec Zip Source avec une capture CALCUL D'UNE RACINE NUMÉRIQUE par pgl10
Source avec Zip MINICHAT MULTI-CLIENT par wisar
Source avec Zip Source avec une capture MONPPM : UN AFFICHEUR .PPM par pgl10

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 1,139 sec (3)

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