人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

複数のスレッドを立てプログラム動作させています
この際、WaitForMultipleObjectsで指定されたカーネルオブジェクトのうちの1つまたはそれらのすべてがシグナル状態になるか、指定された時間が経過するまで待機しています。

但し、この方式の場合64個までのハンドル待機しか出来ません。

ここで
1.64個以上のハンドル待機を実現する方式
以下の記載は、見ましたが詳細が不明なので出しています
http://yokohama.cool.ne.jp/chokuto/advanced/function/WaitForMultipleObjects.html

2.この方式以外でのハンドル制御方式
出来うる限り具体的に!

これ等の何れかを教えて下さい

●質問者: gin106
●カテゴリ:コンピュータ インターネット
✍キーワード:オブジェクト カーネル スレッド ハンドル プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●70ポイント ベストアンサー

1について

?64 (MAXIMUM_WAIT_OBJECTS) 個のハンドルを待機するスレッドを作成し、そのスレッドとそれ以外の待機オブジェクトのハンドルを待機します。この方法を使用して、ハンドルを64 (MAXIMUM_WAIT_OBJECTS) 個ずつのグループに分割します。

N個のカーネルオブジェクトを監視するために、最大64個ずつのM(<64)グループに分けます。

各グループごとにスレッドを起動し、そのスレッドで自分のグループに属するカーネルオブジェクトに対して、WaitForMultipleObjectsを呼び出してやり、1つまたはそれらのすべてがシグナル状態になった時点でそのスレッドを抜けるようにします。

こうすると、M個のスレッドオブジェクトに対して、WaitForMultipleObjectを呼び出すと、最終的にはN個に対してWaitForMultipleObjectを呼び出しているような処理が実現できるということだと思います。

Mが64以上になる、つまり、Nが64x64以上になるのであれば、この仕組みをもう一段増やせば、64x64x64まで対応できます。


?RegisterWaitForSingleObjectを呼び出してそれぞれのハンドルを待機します。スレッドプール由来の待機スレッドが64 (MAXIMUM_WAIT_OBJECTS) 個の登録オブジェクトを待機し、オブジェクトがシグナル化されるかタイムアウト時間が経過した後に作業スレッドを割り当てます。

N個のカーネルオブジェクトごとに、RegisterWaitForSingleObjectを呼び出して、コールバックを指定します。

各カーネルオブジェクトにIDをつけて、コールバックにそのIDが渡るようにしてあげれば、コールバックの方ですべてのオブジェクトに対してのシグナルを監視できます。

このシグナルを監視して、1つまたはそれらのすべてがシグナル状態になった時点でイベントを発生させるようにして、そのイベントが発生するまで待機するような仕組みで対応するということだと思います。



2について


どんなカーネルオブジェクトを監視し、どのような条件で処理を行いたいかではないでしょうか?


すべてのカーネルオブジェクトがシグナル状態になるまで待つのであれば、64個ずつWaitForMultipleObjectを呼び出す処理をループしてあげればいいでしょう。


対象がスレッドだとして、スレッドのルーチンを多少変更できるのであれば、どれか1つでもシグナル状態になったことがわかるだけでいいのであれば、排他制御しないで共有するフラグを用意してあげるだけでも十分な気がします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ