Threads werden in der Windows-API mit der Funktion CreateThread() erstellt und genau wie in Pthreads werden eine Reihe von Eigenschaften wie Sicherheitsinformationen, Stapelgröße und Thread-Flags an die Funktion übergeben. Im folgenden Programm verwenden wir die Standardwerte dieser Eigenschaften. (Standardmäßig wird der Thread zunächst nicht in einen angehaltenen Zustand versetzt, sondern er kann stattdessen vom CPU-Scheduler ausgeführt werden.) Nachdem der Summenthread erstellt wurde, muss der übergeordnete Thread warten, bis er abgeschlossen ist, bevor er den Wert von ausgeben kann Summe, da der Wert vom Summationsthread festgelegt wird. Im Pthread-Programm verwenden wir die pthread-join()-Anweisung, um den übergeordneten Thread auf den Summierungsthread warten zu lassen. Hier führen wir mithilfe der WaitForSingleObject()-Funktion das Äquivalent dazu in der Windows-API aus, was dazu führt, dass der erstellende Thread blockiert, bis der summierende Thread beendet wurde. In Situationen, in denen Sie auf den Abschluss mehrerer Threads warten müssen, können Sie die Funktion WaitForMultipleObjects() verwenden. Der Funktion werden vier Parameter übergeben –
Wenn THandles beispielsweise ein Array von Thread-HANDLE-Objekten der Größe N ist, kann der übergeordnete Thread darauf warten, dass alle seine untergeordneten Threads diese Anweisung abschließen –
WaitForMultipleObjects(N, THandles, WAHR, UNENDLICH );
#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); } }
Das obige ist der detaillierte Inhalt vonWindows-Thread-API im C-Programm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!