マルチスレッドプログラム
C ランタイム ライブラリ リファレンス:インデックス への移動
Win32 プログラムでは,複数の実行スレッドを作成できます。プログラムで複数のスレッドを作成し,それらのスレッドでも C++ ランタイムライブラリを使用する場合は,かわりに CW32MT.LIB または CW32MTI.LIB ライブラリを使用する必要があります。
マルチスレッドライブラリは,スレッドの作成に使用される次の関数を提供します。
また,上の関数に対応して,スレッドを終了するための次の関数を提供します。
- _endthread
- _endthreadex
- _threadid(スレッドの現在の識別番号,つまりスレッド ID が格納されているグローバル変数)
ヘッダーファイル stddef.h には,_threadid の宣言が含まれています。
複数のスレッドを使用するプログラムをコンパイルまたはリンクする場合は,-tWM
コンパイラスイッチを使用する必要があります。例を示します。
BCC32 -tWM THREAD.C
メモ: マルチスレッドプログラムで signal 関数を使用する場合は,特に注意が必要です。
SIGINT
,SIGTERM
,およびSIGBREAK
シグナルは,Win32 以外のアプリケーションのメインスレッド(スレッド 1)でのみ使用できます。このシグナルの 1 つが発生すると,そのとき実行されているスレッドが中止され,スレッド 1 によって設定されたシグナルハンドラ(ある場合)に制御が移されます。その他のシグナルは任意のスレッドで処理できます。セマフォデッドロックが発生する可能性があるため,シグナルハンドラで C++ ランタイムライブラリ関数を使用してはなりません。かわりに,ハンドラは単純にフラグを設定するか,セマフォを送信し,即座に戻る必要があります。