• ベストアンサー

MFCスレッド CriticalSection

CriticalSectionでスレッド処理をのロックを行なっています。 CriticalSectionは処理を待機させるものだと思っているのですが、 マウスをクリックする度にCriticalSectionが溜まっていくので、 操作が終わったあとも溜まった処理をし続けてしまいます。 この処理がたまるのをある程度で制限などしたいのですが、 可能でしょうか? また、スレッドを強制的に終了させることは出来ないのでしょうか?

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

間の処理を飛ばしても良いならスレッドは常に起動継続で処理の受け渡しはキューを使ってはどうでしょうか? キューの書き換えだけCriticalSectionで保護します。 スレッドがキューから取り出すときに複数あった場合は最後の処理だけ行います。処理が終わったら再びキューの更新を待つのです。 これで問題があるなら根本的な仕様に問題があると思います。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

使い方が間違っていると思います。 局所的にリソースへのアクセスの制限を加えるためのCriticalSectionですので違う設計をすべきでしょう。 マウス・クリックの度にスレッドを起動したくないなら、スレッド起動中にはvolatileなフラグ変数でスレッド起動を制限をすれば良いのではないでしょうか? スレッド起動時 → フラグをON スレッド停止時 → フラグをOFF 既にフラグがONならスレッドは起動しない。

spendtoomuch
質問者

お礼

有難うございます。 起動したくないというより、最後に起動したスレッドの処理を 反映したいと考えています。 なので上限を決めてある程度はスレッドを起動したいのですが・・・

関連するQ&A