マルチメディアタイマーを使う


うしお  2007-03-08 18:46:15  No: 25216

マルチメディアタイマーを使いたいと思うのですが
インターバルよりも処理に時間がかかった場合、その処理が終わる前に
次の処理が開始されるようなのですが、
処理が終わるまで待つというようにはできないでしょうか?
また、そういうものは有りませんか?(結構探したのですが見つかりませんでした)


deldel  2007-03-08 22:11:41  No: 25217

よく以下を使用します。

const
  boOk: Boolean = True;
begin
  if not boOk then Exit;
  boOk := False;
  //長〜い処理
  boOk := True;
end;


えーと  2007-03-08 23:25:54  No: 25218

わたしもそのように答えようと思いましたが

>処理が終わるまで待つというようにはできないでしょうか?

待っていることにはならないかと・・・

そもそも「待つ」って言う仕様は、スレッドが何百にもなる可能性があって
危険ですしね。


deldel  2007-03-09 00:19:09  No: 25219

タイマーイベント中に次のイベント処理は行われず、
前のイベント処理が終了次第、次のイベント処理が
行われるという意味では、待っているといっていいと
思いますが・・・。どうでしょう?


えーと  2007-03-09 02:16:22  No: 25220

>前のイベント処理が終了次第、次のイベント処理が

正確には、exit するわけですから、「待つ」んじゃなくて「何もしない」ですよね。
終了次第じゃなくて、終了してから次の OnTimer イベントが起こってから、でしょう。

マルチメディアタイマの実行処理は別スレッドなんですよね。ですから、本質的に
待つ仕様にすると何百ものスレッドが待つことになる可能性が生じます。

これにたいして、普通の TTimer などの WM_TIMER メッセージベースのタイマは
自動的に待つ仕様になりますが、万一キューにメッセージが溜まっても、OS が一つに
まとめてくれます。

質問者はなぜマルチメディアタイマを使いたのかをまず示すべきでしょう。


うしお  2007-03-10 23:47:40  No: 25221

deldelさんのとおりで
前のイベント処理が終了するまで次のイベント処理が行われない
というものです。
マルチメディアタイマーでなくてもかまわないのですが。
ほぼ正確なインターバルでループできるタイマーがほしいのです。
OnIdleはつかいたくないので


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加