Maison  >  Article  >  développement back-end  >  API Windows Thread dans le programme C

API Windows Thread dans le programme C

PHPz
PHPzavant
2023-09-05 19:17:10524parcourir

API Windows Thread dans le programme C

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 -

  • Le nombre d'objets à attendre
  • Un pointeur vers un tableau d'objets
  • Un drapeau indiquant si tous les objets ont été signalés.
  • Durée d'expiration (ou infinie)

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

Programme C multithread utilisant l'API Windows.

Exemple

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

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer