• ベストアンサー

WindowAPI スレッドのステータスの取得

WindowAPI スレッドのステータスの取得 SleepやWaitForSingleObject/WaitForMultipleObjectsの関数を呼び出し スレッドをsleep状態にしたとします(スレッドA)。 その他のスレッドからスレッドAがSleep状態か どうかを確認することはできるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mi65536
  • ベストアンサー率100% (6/6)
回答No.2

念のため、前回の回答への補足です。 > こちらでも直前・直後にフラグをON/OFFさせる方法を試してみたのですが、 多分そうだろうなと思ってました。 > Unlock直後からSleepに入る際のわずかな期間に > どうしてもフラグと実際のステートの齟齬が出てしまうため > それを当てにすることはできないようでした。 スレッド制御において、齟齬のでない状態の管理というは不可能です。 もしそれが可能であるとすると、ミューテックスのような制御機構そのものが不要になりますので。 > やはり外部のスレッドの状態がどうであるかを気にしなくても済むようにプログラムする > のが一番手っ取り早い方法のようです。 手っ取り早いと言いますか、それが本来の正しいやり方だと思います。

emuesuenu
質問者

お礼

どうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mi65536
  • ベストアンサー率100% (6/6)
回答No.1

自分も興味を持ったので、少し調べてみましたが、難しいですね。 とりあえず、それらしいAPIを見つけられませんでした。 ただ、通常の1つのミューテックスなどで、処理を制御するケースでは、 他のスレッドの状態を知る必要のあるケースが想像つきませんでした。 どのような条件下で、他のスレッドの状態を知る必要が生じるのかを 簡単で良いので書いて頂くと回答し易いかも知れません。 (ただ、明快な回答をできるか解りませんが…。) また、1つ擬似的な方法として、下記を記しますが、良い方法か悪い方法か解りません。 スレッド、t1,t2,…,tn に対して、 状態、s1,s2,…,sn を用意しておいて、 制御オブジェクト(ミューテックスなど)m1,m2,…,mnを用意します。 スレッドtkでのスリープ処理で、 mk.lock sk = スリープ状態 mk.unlock Sleep mk.lock sk = 非スリープ状態 mk.unlock のように処理します。 他には、スレッドtkでのクリティカルな処理で、同様に、 mk.lock sk = 状態の変更 mk.unlock // クリティカルな処理 mk.lock sk = 状態の変更 mk.unlock のようにします。 他のスレッドから、スレッドtkの状態を知るには、 mk.lock skの参照 sk.unlock のようにします。 これで一応状態の管理はできるとは思います。 #役にたつかどうか解りませんが…。(変な回答ですいません。)

emuesuenu
質問者

お礼

こちらでも直前・直後にフラグをON/OFFさせる方法を試してみたのですが、 Unlock直後からSleepに入る際のわずかな期間に どうしてもフラグと実際のステートの齟齬が出てしまうため それを当てにすることはできないようでした。 やはり外部のスレッドの状態がどうであるかを気にしなくても済むようにプログラムするのが 一番手っ取り早い方法のようです。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A