Les threads sont créés dans l'API Windows à l'aide de la fonction CreateThread(), et tout comme dans Pthreads, un ensemble de propriétés telles que les informations de sécurité, la taille de la pile et les indicateurs de thread sont transmis à la fonction. Dans le programme suivant, nous utilisons les valeurs par défaut de ces propriétés. (La valeur par défaut ne définit pas initialement le thread dans un état suspendu, mais le rend éligible pour être exécuté par le planificateur de processeur.) Une fois le thread de somme créé, le parent doit attendre qu'il se termine avant de pouvoir afficher la valeur de Somme car la valeur est définie par le thread de sommation. Dans le programme Pthread, nous utilisons l'instruction pthread join() pour faire attendre le thread parent le thread de sommation. Ici, en utilisant la fonction WaitForSingleObject(), nous faisons l'équivalent de cela dans l'API Windows, ce qui provoque le blocage du thread de création jusqu'à la sortie du thread de sommation. Dans les situations où vous devez attendre la fin de plusieurs threads, vous pouvez utiliser la fonction WaitForMultipleObjects(). La fonction reçoit quatre paramètres -
Par exemple, si THandles est un tableau d'objets thread HANDLE de taille N, le thread parent peut attendre que tous ses threads enfants terminent cette instruction -
WaitForMultipleObjects(N, THandles, VRAI, INFINI );
#include<windows.h> #include<stdio.h> DWORD Sum; /* data is shared by the thread(s) */ /* thread runs in this separate function */ DWORD WINAPI Summation(LPVOID Param){ DWORD Upper = *(DWORD*)Param; for (DWORD i = 0; i <= Upper; i++) Sum += i; return 0; } int main(int argc, char *argv[]){ DWORD ThreadId; HANDLE ThreadHandle; int Param; if (argc != 2){ fprintf(stderr,"An integer parameter is required</p><p>"); return -1; } Param = atoi(argv[1]); if (Param < 0){ fprintf(stderr,"An integer >= 0 is required</p><p>"); return -1; } /* create the thread */ ThreadHandle = CreateThread( NULL, /* default security attributes */ 0, /* default stack size */ Summation, /* thread function */ &Param, /* parameter to thread function */ 0, /* default creation flags */ &ThreadId); /* returns the thread identifier */ if (ThreadHandle != NULL){ /* now wait for the thread to finish */ WaitForSingleObject(ThreadHandle,INFINITE); /* close the thread handle */ CloseHandle(ThreadHandle); printf("sum = %d</p><p>",Sum); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!