Я написал многопоточную программу, в которой рабочий поток выполняет цикл нажатий клавиш с интервалом вызовов Sleep () до нажатия клавиши ESC, в то время как основной поток ожидает нажатия клавиши ESC и при обнаружении сообщает рабочий поток для выхода.
Он работает нормально и делает то, что должен, но проблема в том, что вызовы Sleep () заставляют мой монитор отключить на это время.
Я полностью отключил монитор в своих настройках управления питанием и попытался заменить функцию Sleep () на this_thread :: sleep_for (chrono :: seconds (3)). Обе функции дают одинаковый результат.
...
kInput.ki.wVk = 0x44; //Press the "D" key
kInput.ki.dwFlags = 0; //0 for key-down
SendInput(1, &kInput, sizeof(INPUT)); //send the input
Sleep(3000); //wait for 3 seconds
kInput.ki.dwFlags = KEYEVENTF_KEYUP; //key release
SendInput(0, &kInput, sizeof(INPUT)); //send release
...
Насколько мне известно, функция Sleep () должна только заставить программу ждать указанное количество времени, а затем продолжать. Я никогда не слышал о функциях Sleep () и sleep_for (), заставляющих мониторы спать.