Windows Thread API dalam Program C

PHPz
Lepaskan: 2023-09-05 19:17:10
ke hadapan
573 orang telah melayarinya

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);
   }
}
Salin selepas log masuk

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

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan