2009-03-01 10 views
5

OSの並行性について私が知っているのはこれです。OSで実行されているプログラムに関する並行性の質問

OSでマルチタスクを実行するために、CPUは各タスクにタイムスロットを割り当てます。タスクAを実行するとき、他のタスクは「スリープ」します。私は、キーボード/マウスの非アクティブカウントタイマープログラムを持っている

は、ここに私の質問です。非アクティブが15分以内に継続すると、スクリーンセーバープログラムがポップアップします。

並行性の理論が上記のとおりであれば、タイマーは不正確になりますか? OS内で動作する各プログラムには「スリープ」時間があるため、タイマープログラムにも「スリープ」する可能性がありますが、現実世界では時間は停止しません。

答えて

1

OSのサービスを使用して、自分で実装しようとしないタイマーを提供します。コードを単純に実行して時間を計測しなければならない場合、コンピューティングに関する限り、我々は暗黒時代にいます。

0

これは言語に依存する可能性があります。 Javaでは、それは問題ではありません。私は、すべての言語がここで「正しいことをする」と思う。とにかくこのようなタイマーは非常に正確ではないという警告があります。通常、タイマーは少なくとも指定した時間だけスリープ状態になりますが、長くスリープ状態になることがあります。つまり、時間がなくなったときにアクティブなスレッドではない可能性があります。したがって、少し後で処理を再開します。

1

、そのタイムスライスが使用されているとき、あなたのタスクは、スリープ状態に置かれることはありませんが、また、それは、(はるかに一般的なほとんどのプログラムである)I/Oを待っている間。

AnthonyWJonesと同様に、現在のオペレーティングシステムの概念を使用してください。

OSカーネルのタイムスライスは、スクリーンセーバーに目立った不正確さを導入するには短すぎます。

1

私はあなたの待機プロセスは非常に単純なことができると思う:

  1. [OSから] activityTime最後の最後のキーの押下やマウス移動の時間=
  2. は今=現在の時刻
  3. [OSから]今ならば> = activityTime後の15分には、数秒間スクリーンセーバー
  4. 睡眠を開始し、ステップなので1

段階に戻る1 2はOSを使用していますが、何らかの実行カウンタは使用しません。このアクティビティ中にいつでも中断しても構わないと思います。

0

sleep()で指定した時間は、プロセスが使用するCPU時間ではなくリアルタイムで表示されます。 (プログラムがスリープしている間にCPU時間が約0になるため)

関連する問題