Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

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


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

  • 待機するオブジェクトの数
  • オブジェクトの配列へのポインタ
  • すべてのオブジェクトが通知されたかどうかを示すフラグ。
  • タイムアウト期間(またはINFINITE)

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

WaitForMultipleObjects(N、THandles、TRUE、INFINITE);

WindowsAPIを使用したマルチスレッド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\n");
      return -1;
   }
   Param = atoi(argv[1]);
   if (Param < 0){
      fprintf(stderr,"An integer >= 0 is required\n");
      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\n",Sum);
   }
}

  1. Windows プログラムをシステム トレイに最小化する方法

    Windows インターフェイスは、何十年にもわたって多くの浮き沈みを経験してきました。スタート メニューなどのいくつかの開発は愛されています。不運な Windows 8 Metro インターフェイスなどの他のものは、ほとんど嫌われています。 最小化されたウィンドウが存在するタスク バーは、そのような憎悪の対象にはなりません。ただし、かなり混雑する可能性があります。すべてのプログラム、特に常に実行する必要があるプログラムが、そこにスペースを取る必要があるわけではありません。残念ながら、Windows には、ウィンドウを他の便利なスペース (通知領域) に最小化するためのネイティブな方法があ

  2. Windows Insider Program に有用なフィードバックを送信する方法

    Microsoft は、Windows Insider プログラムとフィードバック ハブから多くの価値を得ていますが、実際に使用される有用なフィードバックを送信するのは難しい場合があります。 Microsoft の新しいコホート プログラム、フィードバック ハブのしくみ、および Microsoft の開発者が Windows 10 を改善するために実際に使用できる実行可能なフィードバックを送信する方法について、いくつかの情報を以下に示します。 フィードバック ハブ Microsoft は、善意でフィードバック Hub を開発しました。基本的な考え方は、Windows 10 で問題が発生した場