C プログラムの Windows スレッド API

PHPz
リリース: 2023-09-05 19:17:10
転載
573 人が閲覧しました

C プログラムの Windows スレッド API

スレッドは、CreateThread() 関数を使用して Windows API で作成され、Pthread と同様に、セキュリティ情報、スタック サイズ、スレッド フラグなどのプロパティのセットが に渡されます。関数。次のプログラムでは、これらのプロパティのデフォルト値を使用します。 (デフォルトでは、最初はスレッドが一時停止状態に設定されませんが、その代わりに、CPU スケジューラによって実行できるようになります。) 合計スレッドが作成された後、親は、合計スレッドの値を出力する前に、スレッドが完了するまで待機する必要があります。値は合計スレッドによって設定されるため、合計します。 Pthread プログラムでは、pthread join() ステートメントを使用して、親スレッドが合計スレッドを待機するようにします。ここでは、WaitForSingleObject() 関数を使用して、これと同等のことを Windows API で実行します。これにより、加算スレッドが終了するまで作成スレッドがブロックされます。複数のスレッドが完了するまで待機する必要がある場合は、WaitForMultipleObjects() 関数を使用できます。この関数には 4 つのパラメータが渡されます。

  • 待機するオブジェクトの数
  • オブジェクトの配列へのポインタ
  • すべてのオブジェクトが完了したかどうかを示すフラグ合図した。
  • タイムアウト期間 (または無限)

たとえば、THandles がサイズ N のスレッド HANDLE オブジェクトの配列である場合、親スレッドはすべての子スレッドが完了するまで待機できます。このステートメント -

WaitForMultipleObjects(N, THandles, TRUE, INFINITE);

Windows API を使用したマルチスレッド C プログラム。

#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);
   }
}
ログイン後にコピー

以上がC プログラムの Windows スレッド APIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート