EventのResetTypeについて マイナーすぎる3DS備忘録

ResetTypeとはlibctruで定義されているEventやTimerのリセットに使用される列挙型です。Eventのリセットに使用されるのは、

  • RESET_ONESHOT
  • RESET_STICKY

の2つです。今回はこの2つの違いについて書いていきます。


RESET_ONESHOT
RESET_ONESHOTは、Signalが送信され、Waitしているスレッドが動き出したとき自動でSignalがクリアされるのが特徴です。一般的に2つのスレッド(Signalするスレッド, Waitするスレッド)間で使用するときに用いられます。


RESET_STICKY
RESET_STICKYはRESET_ONESHOTと違い、Signalが自動でクリアされることはありません。2つ以上のスレッドが同時にその他のスレッドのSignalを待っているときに使用されます。自動でクリアされないのでクリアのし忘れに注意してください。



先ほどの説明をもう少しわかりやすく説明します。


例として3つのスレッドA, B, CとイベントXがあるとします。
スレッドA, Bは共にイベントXを待っています。

  • イベントXがRESET_ONESHOTでリセットされている時

この時、スレッドCがイベントXにSignalを送信すると、スレッドA, BのどちらかのみがWait状態から起動し、もう片方のスレッドはWaitし続けます。もう一度イベントXにSignalを送信するともう片方のスレッドも起動します。

  • イベントXがRESET_STICKYでリセットされている時

この時、スレッドCがイベントXにSignalを送信すると、スレッドA, Bの両方が起動します。もう一度イベントXを使用する場合はイベントXをクリアする必要があります。


いかがでしたでしょうか。今回は少し難しい内容になってしまいました。RESET_ONESHOTは1つのスレッド、RESET_STICKYは複数のスレッドに効果があるという認識で大丈夫だと思います。
それでは。