Delphi 使用: 2007
こんにちは、みんな、
ViewStyle
に設定された TListView がありvsReport
ます。ボタンをクリックすると、約 50 のスレッドが起動します。各スレッドにはTListItem
コンポーネントがあります。それぞれTListItem
にSubItem
タイマーである があります。250 から始まり、0 まで下がります。ユーザーは、TListView で各タイマーの減少を確認できます。
私は次のコードを書きました:
procedure TThreadWorker.DeleteTickets;
begin
ListItem.Delete;
end;
procedure TThreadWorker.UpdateTimer;
begin
ListItem.SubItems[1] := IntToStr(Timer);
end;
procedure TThreadWorker.TimerCounter;
begin
Timer := 300;
repeat
Sleep(1000);
Dec(Timer);
Synchronize(UpdateTimer);
until (Timer = 0);
Synchronize(DeleteTickets);
end;
そして...それは動作します!しかし、問題は次のとおりです。これらの同期はすべて、不必要に CPU を過負荷にしているようです。明らかに、より多くのスレッド (100、200、または 300) を起動したり、より弱いコンピューターを使用したりすると、より大きな問題になります。最初は、それが同期であるかどうかわかりませんでした。しかし、それらを無効にすると、CPU が過負荷になることはありません。
率直に言って、それはそれほど問題ではありません。しかし、タイマーの減分によって CPU の過負荷が発生するべきではないと感じています。私のコードはおそらく正しくありません。呼び出しUpdateTimer
頻度を減らしてみたところ、CPU の過負荷は緩和されましたが、最終的には修正されませんでした。さらに、タイマーが毎秒更新されるのをユーザーに見てもらいたいと思います。タイマーも可能な限り正確である必要があります。
ありがとうございました。