スレッドは、CreateThread() 関数を使用して Windows API で作成され、Pthread と同様に、セキュリティ情報、スタック サイズ、スレッド フラグなどのプロパティのセットが に渡されます。関数。次のプログラムでは、これらのプロパティのデフォルト値を使用します。 (デフォルトでは、最初はスレッドが一時停止状態に設定されませんが、その代わりに、CPU スケジューラによって実行できるようになります。) 合計スレッドが作成された後、親は、合計スレッドの値を出力する前に、スレッドが完了するまで待機する必要があります。値は合計スレッドによって設定されるため、合計します。 Pthread プログラムでは、pthread join() ステートメントを使用して、親スレッドが合計スレッドを待機するようにします。ここでは、WaitForSingleObject() 関数を使用して、これと同等のことを Windows API で実行します。これにより、加算スレッドが終了するまで作成スレッドがブロックされます。複数のスレッドが完了するまで待機する必要がある場合は、WaitForMultipleObjects() 関数を使用できます。この関数には 4 つのパラメータが渡されます。
たとえば、THandles がサイズ N のスレッド HANDLE オブジェクトの配列である場合、親スレッドはすべての子スレッドが完了するまで待機できます。このステートメント -
WaitForMultipleObjects(N, THandles, TRUE, INFINITE);
#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 サイトの他の関連記事を参照してください。