Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Windows Thread API dalam Program C

Windows Thread API dalam Program C

PHPz
PHPzke hadapan
2023-09-05 19:17:10559semak imbas

Windows Thread API dalam Program C

Thread dicipta dalam Windows API menggunakan fungsi CreateThread() dan sama seperti dalam Pthreads, satu set sifat seperti maklumat keselamatan, saiz tindanan dan bendera benang dihantar ke fungsi tersebut. Dalam program berikut, kami menggunakan nilai lalai sifat ini. (Lalai tidak menetapkan urutan pada mulanya kepada keadaan digantung, sebaliknya menjadikannya layak untuk dijalankan oleh penjadual CPU.) Selepas urutan jumlah dibuat, ibu bapa mesti menunggu sehingga ia selesai sebelum ia boleh mengeluarkan nilai Jumlah kerana nilai ditetapkan oleh benang penjumlahan. Dalam program Pthread, kami menggunakan pernyataan pthread join() untuk membuat utas induk menunggu untuk utas penjumlahan. Di sini, menggunakan fungsi WaitForSingleObject(), kami melakukan perkara yang setara dengan ini dalam API Windows, yang menyebabkan benang penciptaan disekat sehingga benang penjumlahan telah keluar. Dalam situasi di mana anda perlu menunggu beberapa utas selesai, anda boleh menggunakan fungsi WaitForMultipleObjects(). Fungsi ini dilalui empat parameter -

  • Bilangan objek yang perlu ditunggu
  • Penuding kepada susunan objek
  • Bendera yang menunjukkan sama ada semua objek telah diberi isyarat.
  • Tempoh tamat masa (atau tidak terhingga)

Contohnya, jika THandles ialah susunan objek HANDLE benang bersaiz N, benang induk boleh menunggu semua anak benangnya melengkapkan pernyataan ini -

WaitForMultipleObjects(N, THandles, TRUE, INFINITE );

Program C berbilang benang menggunakan API Windows.

Contoh

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

Atas ialah kandungan terperinci Windows Thread API dalam Program C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam