CまたはPythonでシステムのアイドル時間(キーを押さずにマウスを動かした)を取得するにはどうすればよいですか?
編集:私のプログラムは、アイドル時間が10秒を超えるとカウンターを一時停止します
CまたはPythonでシステムのアイドル時間(キーを押さずにマウスを動かした)を取得するにはどうすればよいですか?
編集:私のプログラムは、アイドル時間が10秒を超えるとカウンターを一時停止します
現時点ではテストする Mac がないため、これが機能することを確認できませんが、このスレッドはあなたが探しているソリューションを提供しているようです: http://www.dssw.co.uk/sleepcentre/threads/ system_idle_time_how_to_retrieve.html
簡単に言うと、subprocessモジュールを使用して以下を呼び出します。
ioreg -c IOHIDSystem
次に、出力を解析し、値を 10^9 で割り、アイドル時間を秒単位で取得します。
アプリケーションは GUI 駆動型ですか?
その場合、GUI が起動したときにタイマーを開始し、最上位でキーボードとマウスのコールバックを行うことができます。キーボードまたはマウスのコールバックがトリガーされるたびに、タイマーをリセットします。それ以外の場合、タイマーがオフになると、ハンドラー コードがカウンターを一時停止する必要があります。
そうでない場合は、これを無視してください... ;-)
python(win)でそれはどうですか?Python の標準 lib の time モジュールのように ... ?
プログラムの過程で費やされた時間を意味する場合、プログラムが完了した後、最も簡単な方法は、UNIX の「時間」関数を実行することです。
# echo foo
foo
# time echo foo
foo
real 0m0.000s
user 0m0.000s
sys 0m0.000s
プログラムの実行中にデータ収集を本当に行う必要がある場合は、より技術的な答えがあります.UNIXの本を見てみましょう...
アップデート:
clock_t times( struct tms *buf );
詳細については、マンページまたは「UNIX 環境での高度なプログラミング」のセクション 8.15 (Stevens) を参照してください。この種の質問に対するバイブルです。
更新 2:
別のプロセスで「sar」を実行し (top の stdout 印刷バージョンのようなものです)、必要な結果を探し、そのプロセスにシグナルを送信します。
または、「ioreg」に関して投稿された他のソリューション。
ただし、それ自体が本質的に「カーネルのような」プログラムであり、コアに大きなアクション ループがある場合は、未使用のサイクルを自分で追跡するのが最善の方法であることに気付くかもしれません。それ以外の場合、これは解決するのが重要な問題です。