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); } }
-
Windows プログラムをシステム トレイに最小化する方法
Windows インターフェイスは、何十年にもわたって多くの浮き沈みを経験してきました。スタート メニューなどのいくつかの開発は愛されています。不運な Windows 8 Metro インターフェイスなどの他のものは、ほとんど嫌われています。 最小化されたウィンドウが存在するタスク バーは、そのような憎悪の対象にはなりません。ただし、かなり混雑する可能性があります。すべてのプログラム、特に常に実行する必要があるプログラムが、そこにスペースを取る必要があるわけではありません。残念ながら、Windows には、ウィンドウを他の便利なスペース (通知領域) に最小化するためのネイティブな方法があ
-
Windows Insider Program に有用なフィードバックを送信する方法
Microsoft は、Windows Insider プログラムとフィードバック ハブから多くの価値を得ていますが、実際に使用される有用なフィードバックを送信するのは難しい場合があります。 Microsoft の新しいコホート プログラム、フィードバック ハブのしくみ、および Microsoft の開発者が Windows 10 を改善するために実際に使用できる実行可能なフィードバックを送信する方法について、いくつかの情報を以下に示します。 フィードバック ハブ Microsoft は、善意でフィードバック Hub を開発しました。基本的な考え方は、Windows 10 で問題が発生した場