Heim  >  Artikel  >  Backend-Entwicklung  >  Windows-Thread-API im C-Programm

Windows-Thread-API im C-Programm

PHPz
PHPznach vorne
2023-09-05 19:17:10527Durchsuche

Windows-Thread-API im C-Programm

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 –

  • Die Anzahl der Objekte, auf die gewartet werden soll
  • Ein Zeiger auf ein Array von Objekten
  • Ein Flag, das angibt, ob alle Objekte signalisiert wurden.
  • Timeout-Dauer (oder unendlich)

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 );

Multithread-C-Programm mit Windows-API.

Beispiel

#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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen