Delphiプログラムには、長くて単純なループがいくつかあります。これは、何百万回もループし、実行に数秒かかる場合があります。ループ内のコードは非常に高速で、最適化されています。何度も行われるので時間がかかります。
例えば:
Screen.Cursor = crHourGlass;
R := FirstRecord;
while R <> nil do begin
{ do something simple with R.Value }
R := R.NextRecord;
end;
Screen.Cursor := crDefault;
プログラムが応答しなくなることを望まないので、ループ内にApplication.ProcessMessagesを追加します。ただし、追加されたステートメントによってループの速度ができるだけ遅くならないようにする必要もあります。
リンクリストをフォローしているので、利用可能なカウント変数すらありません。間隔が必要な場合は、カウント変数を追加する必要があります。または、タイマーを追加する必要がありますが、時間チェックを最小限に抑える必要があります。
追加されるオーバーヘッドを最小限に抑えるために、これをどのように実装する必要がありますか?
結論:
今のところ、私はAPZ28の答えのようなことをしています。
しかし、長期的には、これを処理するために何らかのスレッドを実装する必要があるようです。Application.ProcessMessagesがそれを行う唯一の方法だと思ったので、これを指摘してくれてありがとう。