Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: 123 on September 23, 2014, 04:25:46 PM

Title: Возможна ли одновременная работа ISKEYDOWN и WAIT?
Post by: 123 on September 23, 2014, 04:25:46 PM
В скрипте есть долгое ожидание, которое должно быть строго определённое время, но иногда оно не нужно и хотелось бы сделать возможность нажатием клавиши во время этого ожидания завершать его досрочно, чтобы скрипт продолжал работу дальше. На ум приходит только слоёный пирог из этих 2 команд - их многократное чередование, сжатое с помощью цикла. Но тогда пострадает точность всего срока ожидания. Придётся регулировать его методом тыка. Оно может получаться разным на компах разной мощности или даже на одном и том же при разной загруженности.
Можно ли сделать как-то получше ожидание с возможностью прерывания? Существует ли возможность точной ориентации по времени скрипта, в котором смесь разных команд и ожиданий?
Title: Re: Возможна ли одновременная работа ISKEYDOWN и WAIT?
Post by: Oraven on September 23, 2014, 05:25:15 PM
Только циклом можно проконтролировать нажатия клавиш

Code: (clickermann) [Select]
// вариант с циклом-задержкой
$ms = $_ms // засекаем время
$count  = 0
WHILE(($count < 10)&(iskeydown(#ctrl)=0)) // задержка на 10 секунд отменяемая Ctrlом
   INC($count,1)
   WAITMS(999)
END_CYC

LOGWRITE ("Прошло 1: ", $_ms-$ms)

// вариант с обычной задержкой
$ms = $_ms // засекаем время
WAIT(10)

LOGWRITE ("Прошло 2: ", $_ms-$ms)

HALT

Лог:
Code: [Select]
18:23:32 Прошло 1: 10003
18:23:42 Прошло 2: 10000
Title: Re: Возможна ли одновременная работа ISKEYDOWN и WAIT?
Post by: Vint on September 23, 2014, 05:40:51 PM
Чтобы не накапливать ошибку WAIT не используй её для паузы в этом случае. Ориентируйся на системное время.
От "компов разной мощности или даже на одном и том же при разной загруженности" зависеть не будет.
Code: (clickermann) [Select]
$time = $_ms+600000  // 10 минут
WHILE(($time > $_ms)&(iskeydown(#ctrl)=0))
  WAITMS(20)
END_CYC