マルチメディアタイマーを使いたいと思うのですが
インターバルよりも処理に時間がかかった場合、その処理が終わる前に
次の処理が開始されるようなのですが、
処理が終わるまで待つというようにはできないでしょうか?
また、そういうものは有りませんか?(結構探したのですが見つかりませんでした)
よく以下を使用します。
const
boOk: Boolean = True;
begin
if not boOk then Exit;
boOk := False;
//長〜い処理
boOk := True;
end;
わたしもそのように答えようと思いましたが
>処理が終わるまで待つというようにはできないでしょうか?
待っていることにはならないかと・・・
そもそも「待つ」って言う仕様は、スレッドが何百にもなる可能性があって
危険ですしね。
タイマーイベント中に次のイベント処理は行われず、
前のイベント処理が終了次第、次のイベント処理が
行われるという意味では、待っているといっていいと
思いますが・・・。どうでしょう?
>前のイベント処理が終了次第、次のイベント処理が
正確には、exit するわけですから、「待つ」んじゃなくて「何もしない」ですよね。
終了次第じゃなくて、終了してから次の OnTimer イベントが起こってから、でしょう。
マルチメディアタイマの実行処理は別スレッドなんですよね。ですから、本質的に
待つ仕様にすると何百ものスレッドが待つことになる可能性が生じます。
これにたいして、普通の TTimer などの WM_TIMER メッセージベースのタイマは
自動的に待つ仕様になりますが、万一キューにメッセージが溜まっても、OS が一つに
まとめてくれます。
質問者はなぜマルチメディアタイマを使いたのかをまず示すべきでしょう。
deldelさんのとおりで
前のイベント処理が終了するまで次のイベント処理が行われない
というものです。
マルチメディアタイマーでなくてもかまわないのですが。
ほぼ正確なインターバルでループできるタイマーがほしいのです。
OnIdleはつかいたくないので
ツイート | ![]() |