メッセージループを使うには?

解決


山根  2005-05-17 17:51:42  No: 14829

メッセージループというのを聞くのですが、どうやって使うのかが、いまいちわかりません。
だいたい60fpsを実装するには、どのようにすればいいのでしょうか?


にしの  2005-05-17 19:30:56  No: 14830

メッセージループは、プロジェクトのソースに、1行で書かれていますよ。
Application.Run;
がそれです。
実際は、
repeat
  { メッセージ処理 }
until Terminated;
というようになっていて、終了するまでループしながら送られてきたメッセージを処理しています。
これがメッセージループです。
「60fpsを実装するには・・・」という質問があるということは、メッセージループではなく、ウェイト処理ですよね。
ある1処理を、毎秒n回、というように定期的に処理したい場合、次の処理に移るまで待つ必要があります。
このときの書き方は
while 次の処理の時間になっていない
begin
  Application.ProcessMessages;
end;
や、
while 次の処理の時間になっていない
begin
  Sleep(待つミリ秒);
end;
というような形になります。

60fpsを維持する方法は、垂直帰線割り込みを利用するのが常套手段です。
DirectXを使うと、割り込み待ちができたと思います。
それ以外だとポートを直接叩く方法ですが
https://www.petitmonte.com/bbs/answers?question_id=2609
こちらを参考にしてください。

DirectXを使わずに、画面のちらつきも考えないのなら、APIの
timeGetTime
QueryPerformanceCounter
などを使う方法もあります。


山根  2005-05-18 16:40:46  No: 14831

詳しい回答有難うございます。
OnIdle  にかわるものだと思っていたのですが違うようですね…


ぬぬ  2005-05-21 02:37:31  No: 14832

Delphiゲーム製作講座
http://delphi.nce.buttobi.net/mainroutine/index.html
これじゃないですか?


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

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






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