Windows 環境における C 言語によるマルチスレッド関数
Windows OSでは、C言語のマルチスレッド関数はWindows APIが提供する関数が利用できます。以下は一般的なWindowsのマルチスレッド関数です。
- CreateThread 関数 : 新しいスレッドを作成します。この関数のプロトタイプを次に示します。
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
スレッドのセキュリティ属性の指定はlpThreadAttributesパラメータ、スレッドのスタックサイズの指定はdwStackSizeパラメータ、スレッド関数アドレスの指定はlpStartAddressパラメータ、スレッド関数へのパラメータの引き渡しはlpParameterパラメータ、スレッド作成フラグの指定はdwCreationFlagsパラメータ、スレッドIDを受け取る変数の指定はlpThreadIdパラメータで行います。
- WaitForSingleObject 関数は、スレッドの終了を待ちます。この関数のプロトタイプは以下のとおりです。
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
hHandleパラメータは待機するスレッドのハンドルを、dwMillisecondsは待機時間を指定します。
- WaitForMultipleObjects 関数: 複数のスレッドの終了を待機します。関数のプロトタイプを次に示します。
DWORD WaitForMultipleObjects(
DWORD nCount,
const HANDLE *lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
nCount パラメーターは待機するスレッドハンドル配列の要素数を指定し、lpHandles パラメーターはスレッドハンドル配列を指すポインターで、bWaitAll はすべてのスレッドの終了を待つかどうかを指定し、dwMilliseconds は待機する時間を指定します。
- ExitThread 関数: 現在のスレッドを終了させます。関数のプロトタイプは次のとおりです。
VOID ExitThread(
DWORD dwExitCode
);
なお、dwExitCodeパラメータはスレッドの終了コードを指定します。
これらの関数の利用により、C言語でWindows環境下でのマルチスレッドプログラミングを実現できます。