私のアプリケーションにはバックグラウンドで動作するスレッドがいくつかあります。データベースに接続し、時間のかかる選択クエリを実行します。ほとんどの場合、これらのクエリは複数のレコードしか返しません。しかし時々、数万レコードを返すことがあります。これらはすべてループで処理されます。Delphi - スレッドのスリープ時間を調整する
このような状況は、同時に複数のスレッドで発生する可能性がありますので、私はそれらのスレッドがデータを処理しているとき、私のアプリケーションがCPU時間の100%を使用したくありません。私はすべてのスレッドをプロセッサの時間の間に戦わせたくありません。したがって、これらのスレッド内のループの各反復でSleep()関数を呼び出します。
ただし、スリープ時間の調整方法はわかりません。私はループが永遠に続くことを望んでいないので、睡眠期間が長すぎることはできません。私は2ミリ秒ごとに(各スレッドで)(なぜ2ms? - これは良い質問です:))を設定します。
は、私は睡眠時間を延長、一度だけ、すべてのn回の反復を(、のは言うスリープ(100)ごとに50回の反復を聞かせて)、睡眠を呼び出すことができることを、他方では、と思いました。どのアプローチを選ぶべきですか?ループの1回の反復には、それぞれ約30ms(スリープなし)が必要です。お知らせください。
ありがとうございます!
マリウス。
を使用しかし、これはまた、誰かが作業しているコンピュータ(たとえば、スプレッドシートを書くこと)にバックグラウンドで実行された場合、あなたはしないでくださいバックグラウンドプロセスでフォアグラウンドプロセスを使用できないようにしたい。 – dummzeuch
真実ですが、そのため、バックグラウンドスレッドの優先度を下げて、他のアプリケーション(またはメインスレッド)を応答可能に保ちながら、システム全体の潜在能力を利用できるようにしています。現代(マルチコア)システムでは、すべてのコアを十分にロードしておくことは、フォアグラウンドアプリケーションの応答性の欠如よりもはるかに大きな問題です。とにかく、大量の最適化されていないI/Oは、システムのユーザビリティに対する大きな脅威です。 – mghie