2017-05-23 5 views
0

特定のキーの組み合わせを押すたびに短いスクリプトを起動するプログラムを作成しました。 私は次のようにpyHookを利用スレッド使用しています:captureFは、特定のキーの組み合わせを押した後、押した場合は、スクリプトを起動しているかどうかをテスト関数であるキーボードイベントをポーリングするPythonプログラムのCPU使用率が高い

def logic(): 
    global running 
    hm = HookManager() 
    hm.KeyDown = captureF 
    hm.HookKeyboard() 
    while(running): 
     pythoncom.PumpWaitingMessages() 
    return 

を。

メインスレッドでは、オプションと終了を含むWindowsトレイguiを実行しています(終了時に、フラグをrunningに設定してロジックスレッドを終了させます)。

問題は私が今直面しているのは、プログラムが起動されたとき(CPUが使用していないときでも)CPU使用率が常に高くなっていることです。より効率的な方法でそれを行う方法がわかりません。

ご協力ありがとうございます。メッセージのためPumpWaitingMessagesチェックをし、何もメッセージが(それがノンブロッキングである)

あなたが遅延のいくつかの種類を挿入する必要がない場合はすぐに返されます。

+0

ブロックしている 'pythoncom.PumpMessages()'を使用できませんか?つまり、whileループは必要ありません –

答えて

1

問題は、あなたのポーリングはCPUを豚ということです。最も簡単なのは:

1/100秒は、良好な反応性を保証し、CPUに呼吸スペースを与えます。私はあなたに値を調整させます。値を高く設定するほど、ポーリングの反応が少なくなります。

しかし、ループに何もコントロールする必要がない場合は、ループなしでブロック呼び出しを使用することもできます。