J'ai ecris une Class me permettant de me connecter sur des cameras numerique IP, cette class comprend une partie affichage et une partie telechargement, or dans cette meme Class les 2 fonctions doivent s'executer en parallele, d'où l'utilité d'un Thread. Ma Class n'est pas finalisée donc je ne la dépose pas pour le moment (mais si vous avez des question sur les Cameras IP, n'ésitez pas)
La partie Thread dans une Class ne fut pas facile donc je dépose simplement cette partie.
Il faut au moins 3 variables, un pointeur sur le thread, une structure de section critique, certaine données sont partager par des threads différents il est donc obligatoire d'utiliser une section critique celle ci permet d'eviter que 2 Threads utilisent la meme donnée en meme temps:
Initialiser la section: InitializeCriticalSection(&SynchroMedia);
Avant d'utiliser une variable: EnterCriticalSection(&SynchroMedia);
Apres avoir utiliser la variable: LeaveCriticalSection(&SynchroMedia);
Detruire la section critique: DeleteCriticalSection(&SynchroMedia);
Au départ je pensais simplement créé un Thread avec l'une des fonctions de ma Class, ET bien NON ça ne fonctionne pas. Il faut passer par une fonction qui n'appartient pas à la Class et lui donner en paramètre un pointeur sur la class pour lui permettre d'appeler la fonction qui nous intérresse.:
ThreadStart: est la fonction qui n'appartient pas à ma Class.
this: est le pointeur sur ma Class donné en paramettre.
Ptr_ThreadMedia=CreateThread(NULL,NULL,ThreadStart,(LPVOID)this ,NULL,&dwThreadIDMedia);
Voici la fonction ThreadStart
DWORD WINAPI ThreadStart(LPVOID lpthis)
{// Pointeur sur ma Class
MaClass*ClassThis = (MaClass*) lpthis;
// Appel de la fonction de ma Class, ThreadStart et Thread_DownLoadMedia seront dans un Thread différent.
ClassThis->Thread_DownLoadMedia(0);
return 0;
}
Des que l'on sort de la fonction Thread_DownLoadMedia(), le Thread se termine, il faut donc boucler sur une reception de message, PeekMessage me permet de receptionner des ordres et donc de savoir ce que doit faire cette fonction.
Les autres fonctions donnent des taches à effectuer en envoyant des messages via:
PostThreadMessage(dwThreadIDMedia,WM_START_DOWNLOAD_AUTO,NULL,NULL);
Le code suivant donne le minimum, c'est a dire constructeur et destructeur de la Class, avec initialisation des variables et section critique,le destructeur envoie un message au thread et détruit la section critique.
Une fonction crait le thread.
Si vous avez des questions, en évitant "A quoi ça sert" ==> Si vous ne voyez pas à quoi ça sert c'est que vous n'en avez pas besoin.
Sephiro