• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:timeSetEventに対するtimeKillEventについて)

timeSetEventとtimeKillEventの使用について

このQ&Aのポイント
  • timeSetEvent関数を調査していた際、timeKillEvent関数の使用について疑問が生じました。
  • timeSetEvent関数の戻り値を保存し、必要な時にtimeKillEvent関数を使用するサンプルは見つかったが、これを内部で使用しても問題はないのか疑問です。
  • 実験した限りでは問題はなく、正常に動作しているように見えますが、内部的に問題が発生する可能性があるか心配です。

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

多分大丈夫でしょう。 timeSetEventのコールバックについての情報ではありませんが、同じマルチメディア系のMidiOutProcコールバック関数について > アプリケーションでは、EnterCriticalSection、LeaveCriticalSection、 > midiOutLongMsg、midiOutShortMsg, OutputDebugString、PostMessage、 > PostThreadMessage、SetEvent、timeGetSystemTime、timeGetTime、 > timeKillEvent および timeSetEvent を除き、コールバック関数内から > システム定義関数を呼び出さないようにします。ほかのウェーブ関数を > 呼び出すと、デッドロックの原因となります。 という解説があります。(MSDN) 逆にいうと記載のtimeKillEvent等は大丈夫ということでしょう。 ただしtimeKillEventを実行したら二度とこのコールバック関数が呼ばれないということは保証できないようです。既にイベントがキューイングされている可能性があるのでそれについては対処しましょう。

LongSecret
質問者

お礼

お、ほんとだ MidiOutProcの解説にそういう文章がありますね♪ ありがとうございます! 別の実験で 上記のように使い捨て的な判定するのではなくしておいて 別個に配列にIDを確保しておくようにして、timeSetEventをたくさん連続で呼んだり timeSetEvent→timeKillEvent→timeSetEvent→timeKillEvent といったことも試してみて問題はないようなので (ただ、連続で呼ぶほうはなぜか同じコールバック関数に対して一定の回数以上はできない・・・?というような現象が出ましたが、そんなに何回も呼ぶような設計はそもそもCPUへの影響とかタイミングのとりやすさも含めてあまりやらないで済むほうがいいと思うので) おそらく、むしろ単発で好きな時に走らせて、用がすんだらすぐに止めるようにしつつ、何度でも呼べることを前提にした設計の方が汎用性があっていいかもしれませんね。 (てかそういうことならスレッドのほうが意味的にあってるかもしれませんw) 作戦はいろいろ考えられますが、いずれにせよありがとうございます。

関連するQ&A