2017-08-04 8 views
0

私が 'エスケープ'キーを押したときに書いているプログラムでは、スリープ期間中であっても即座に登録します。現在、キー押下を登録する前に、スリープステートメントの終了まで待機します。スリープ時間はプログラムにとって重要なので、一時停止を追加してユーザーの入力を待つだけの問題ではありません。C++:GetAsyncKeyState()はすぐにキーを登録しません。

int main() 
{ 

    bool ESCAPE = false; // program ends when true 

    while (!ESCAPE) { 
     // Stop program when Escape is pressed 
     if (GetAsyncKeyState(VK_ESCAPE)) { 
      cout << "Exit triggered" << endl; 
      ESCAPE = true; 
      break; 
     } 

     Sleep(10000); 
    } 
    system("PAUSE"); 
    return 0; 
} 

編集:明確にするために、睡眠の理由は、私が時間間隔で繰り返し行動しているということです。

+0

なぜ10秒間寝ていますか? 10秒ごとに特定のアクションを実行したいからですか? –

+0

はい、10秒ごとにアクションを実行しています。 – Grehgous

+0

@Grehgousは、代わりにタイマー、特に待機可能なタイマーを使用します。 –

答えて

1

10秒間スリープする代わりに、10秒経過したかどうかを確認して、その時点で何をする必要があるかを確認できます。このようにして、ループは常にキー押しをチェックしています。

+1

そのループはCPUサイクルを継続して食い込み、CPU使用率が高くなります。特定の持続時間でstd :: this_thread :: sleep_forを挿入してみませんか? – Asesh

+0

@Asesh nowとnext_work_periodの間の各チェックの前にsleep()を呼び出すのではなく、std :: this_thread :: sleep_forのメリットは何ですか? – Grehgous

+1

@Grehgous最初のコードを使用するとコードが移植されますが、SleepはWindows APIですが、Windowsをターゲットにしている場合はSleepを使うことができます – Asesh

関連する問題