1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#include <windows.h>
#include <stdio.h>
HANDLE ghEvent;
DWORD WINAPI Requetes( LPVOID );
void main()
{
HANDLE aThread;
DWORD ThreadID;
int i;
// creation de l'evenement
ghEvent = CreateEvent(0, false, true, NULL);
if(ghEvent == NULL)
{
printf("CreateEvent error: %d\n", GetLastError());
return;
}
// creation du thread
aThread = CreateThread(NULL, // default security attributes
0, // default stack size
(LPTHREAD_START_ROUTINE) Requetes,
NULL, // no thread function arguments
0, // default creation flags
&ThreadID); // receive thread identifier
if(aThread == NULL )
{
printf("CreateThread error: %d\n", GetLastError());
return;
}
// ici, tu peux placer un appel a du code pour effectuer quelquechose
// ...
printf("Le thread principal %d est actif\n", GetCurrentThreadId());
Sleep(1000);
// attente de la fin du thread
printf("Attente de la fin du thread...\n");
WaitForSingleObject(aThread, INFINITE);
printf("le thread est fini\n");
// fermeture du handle du thread
CloseHandle(aThread);
// fermeture du handle de l'event
CloseHandle(ghEvent);
}
// point d'entree du thread
DWORD WINAPI Requetes(LPVOID /*lpParam*/)
{
// boucle infinie
DWORD dwCount = 0;
for(;;)
{
// seulement 3 passage dans la boucle (pour l'instant je suppose)
if(dwCount > 3)
return TRUE;
// attente d'un l'evenement avec un timeout de 4 sec
DWORD dwWaitResult = WaitForSingleObject(
ghEvent, ///< handle to event
4000); ///< 4sec
switch (dwWaitResult)
{
case WAIT_TIMEOUT:
{
// action du thread
printf("Hello World dans le thread %d\n", GetCurrentThreadId());
break;
}
case WAIT_ABANDONED:
return FALSE;
}
}
} |
Partager