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
| DWORD WINAPI monthread(LPVOID);
DWORD WINAPI monthread(LPVOID lpParameter){
HANDLE hEvent = static_cast<HANDLE>(lpParameter);
int i;
for (i=30 ; i>=0 ; i--){
printf("il reste %d seconde(s)\n",i);
if(WaitForSingleObject(hEvent, 1000) != WAIT_TIMEOUT)
break;
}
return 0;
}
int creationthread(){
HANDLE hThread, hEvent;
DWORD ID1;
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if(hEvent == NULL)
return -1;
printf("On cree notre thread\n");
hThread=CreateThread(NULL, 0, monthread, hEvent, 0, &ID1);
if(hThread == NULL)
{
CloseHandle(hEvent);
return -1;
}
while (WaitForSingleObject(hThread, 1)==WAIT_TIMEOUT) {
if (kbhit()){
SetEvent(hEvent); //On dit au thread de se terminer vite
break;
}
}
//On attend que le thread soit vraiment terminé avant nettoyage
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hEvent);
CloseHandle(hThread);
return 0;
}
int main() {
printf("essai de la creation d'un thread\n");
creationthread();
printf("Fin du programme\n");
getchar();
return 0;
} |
Partager