マルチスレッドプログラミングについて
マルチスレッドプログラミングについていくつか教えて下さい。
マルチスレッドの基礎がまだ分かってないので初心者でも分かり易いようにお願いします。
1:イベントオブジェクトについて教えて下さい。
「イベントオブジェクト」の概念がよく分かりません。
○シグナル状態と非シグナル状態とはどういう状態なのでしょうか?
○自動リセットの場合ではどのタイミングで切り替わっているのでしょうか?(下記のソースの場合)
○手動リセットの場合ではどのタイミングで切り替えればよいのでしょうか?(下記のソースの場合)
2:CloseHandle() と ExitThread() について教えて下さい。
○この2つの関数の役割の違いについて教えて下さい。
「スレッドハンドルを閉じる=スレッドを終了」ではないのでしょうか?
また、これらの関数実行時にシグナル状態は気にする必要はありますか?(シグナル状態にしなくてよいのか?)
下記のソースは簡略化のためかなり省略されています。
DWORD WINAPI ThreadProc( DWORD i )
{
while( true )
{
DWORD r = WaitForMultipleObjects( 2, hEvent, FALSE, INFINITE );
if( r == WAIT_OBJECT_0 )
{
// 処理1
}
else if( r == WAIT_OBJECT_0 )
{
// 処理2
}
else
{
ExitThread( TRUE ); // スレッド終了
}
}
}
void MainProc()
{
// 自動リセットのイベントオブジェクト作成
for( int i=0; i<2; i++ )
{
hEvent[i] = CreateEvent( NULL, FALSE, FALSE, NULL );
}
// スレッドを作成
hThread = CreateThread( NULL, 0, ThreadProc, NULL, 0, &dwThreadID );
}
補足
ご回答ありがとうございます。 なるほど、描画デバイスに対して描画スレッドは1対1でしたか・・・ そちらのほうが確かに制御がしやすいですね。ありがとうございました。