- ベストアンサー
Delphiのスレッドプログラミング
ゲームプログラムなんですが、計算するルーチンと描画を行うルーチンの二部構成で現在プログラムを作っています。計算は随時行い、描画は余裕があるときに行うというやり方で、最大限のフレームレートを出そうとしています。 で、いままで、Application.onIdleを使って画面描画していたものを、スレッドを使ってみることにしました。メインスレッドで計算を行い、サブスレッドで描画を行うという方法を考えたのですが・・・。 onIdleを使っているうちは、描画が忙しくなってくる→onIdleが発生しなくなる→描画を間引く→負荷が減るといった構図で丁度よかったのですが・・・。 ---------(描画を行うサブスレッド)--------- While(true) do begin Start := TimeGetTime; Synchronize(); // ここでメインスレッド経由でVCLに描画 Stop := TimeGetTime; If (Stop - Start < 33) then Sleep(33 - stop - start); // 描画が33ms以下で済めば、30FPSになるようにwaitを入れる end; ---------------------------------------- このような方法で最大30FPSを確保しようとしたのですが、描画に負荷がかかってくると、メインスレッドにあるタイマが遅延してしまい、全体がガタガタになってしまいました。OnIdle使用時は描画よりメインの数値計算が優先されていたので、問題なかったのですが・・・。 根本的にマズいんでしょうか、コレ・・・。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#30727
回答No.3
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.2
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.1
お礼
なるほど、勉強になりました。もう少しスレッドに関して勉強してからいろいろいじってみたいと思います。ありがとうございます。