Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (10): [1] 2 3 4 5 6 7 8 9 » В конец    

> Описание: Добавление функции таймера (код выполняемый по времени)
Kibor
Отправлено: 25 Ноября, 2014 - 20:03:37
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Добавлен Таймер.
CREATE_TIMER - обозначает блок кода выполняемый по таймеру.

Синтаксис:

CREATE_TIMER(0, 1000)
{
//тут код выполняемый каждые 1000 мсек.
}

Параметры:
первый - номер таймера. Создавать можно до ста таймеров от 0 до 99.
второй - время в мсек через кторое будет выполняться блок кода в таймере.

Код в таймере работает последовательно с основным кодом.
Когда наступает время срабатывания управление передается в блок таймера.
Когда код в блоке отрабатывается управление возвращается в строку с которой прервалось выполнение основного кода.

Таймеры удобно использовать для постоянного отслеживания нажатий клавиш, сканирования каких то данных и т.д.

С таймера можно выходить с помощью goto на любую метку в коде (кроме в функции). В таком случае возврат в прерванную строку не произойдет.
В таймере можно вызывать функции и отрабатывать любой код без исключения.

пример:
 Цитата:
int a=0;
int x, y;
int color;

enabletimer(0);
enabletimer(1);

j:textout(0, 100, 100, format(a), 1);
textout(1, x+10, y+10, format(color), 1);
sleep(10);
goto j;

exit:;

CREATE_TIMER(0, 1000)
{
a++;
if (a>100)a=0;
}

CREATE_TIMER(1, 100)
{
getmouse(x, y);
color=getcolor(x, y);
if (color==0) goto exit;
}


Управлять таймером можно с помощью следующих функций:
enabletimer - включает созданный таймер и обнуляет время таймера на 0.
enabletimer(0);


disabletimer - выключает созданный таймер.
disabletimer(0);


sendtimer - меняет время срабатывания созданного таймера.
sendtimer(0, 1000);

==========

return в блоке кода таймера дает возможность прервать (без остановки) выполнение кода таймера по оператору return. После return никакие значения передавать с таймера нельзя. Просто прерывать выполнение таймера.
Управление перейдет туда же, так же как и при отработке всего кода в таймере.

CODE:
enabletimer(0);


loop()
{
sleep(100);
beep(1000, 100);
}


CREATE_TIMER(0, 1000)//Номер таймера, выполнение таймера через мсек.
{

beep(2000, 100);
return;
beep(3000, 100);//Никогда не выполнится
beep(5000, 100);//Никогда не выполнится
}

 
 Top
Stanislaw
Отправлено: 26 Ноября, 2014 - 05:30:12
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013  
Репутация: 2




enabletimer - это получается функция с периодической задержкой по таймеру. Просто иногда нужно обозначить какой то блок кода который бы пропускался какое то время при срабатывании определенных условий. Тут другое. Спасибо за новую конструкцию,ей можно будет разгрузить процессор такие вещи как автоподключение, проверка редких, некритических событий и пр.
 
 Top
Kibor
Отправлено: 26 Ноября, 2014 - 07:19:12
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Stanislaw пишет:
обозначить какой то блок кода который бы пропускался какое то время при срабатывании определенных условий

проверять просто условие каждые n...... мсек
CREATE_TIMER(0, 1000)
{
if (условие )
{

}
}
 
 Top
Bubblegum
Отправлено: 26 Ноября, 2014 - 15:32:59
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2014  
Репутация: 0




Поправьте, если я неправильно понял. Заключенная в CREATE_TIMER{n} последовательность выполняется каждые n секунд? Отслеживание таймера параллельно с основной программой? Т.е. каждые n секунд управление передается в этот таймер независимо от того на каком этапе выполнения основного кода я нахожусь?

Если все так, то это же супер функционал для постоянного независимого отслеживания различных событий независимо от места выполнения основной программы!

(Отредактировано автором: 26 Ноября, 2014 - 15:33:30)

 
 Top
Kibor
Отправлено: 26 Ноября, 2014 - 15:38:43
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




да. так.
(Добавление)
 Цитата:
enabletimer(0);
//цикл кода
a: for (int n=0; n<5000; n++)
{
beep(1000, 200);
}
goto a;

er:;
CREATE_TIMER(0, 200)// слежение за нажатой ё для выхода с цикла
{
if (getkeystate(192)==1)goto er;
}
 
 Top
Bubblegum
Отправлено: 26 Ноября, 2014 - 16:11:41
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2014  
Репутация: 0




Спасибо, такой функционал очень нужен.
 
 Top
nawigatr
Отправлено: 28 Ноября, 2014 - 10:54:13
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2014  
Репутация: 0




Во время исполнения функций pause() и sleep() таймер не работает( в частности слежение за нажатием клавиш. Можно сделать что бы и при исполнении этих функций таймер работал?

(Отредактировано автором: 28 Ноября, 2014 - 10:54:36)

 
 Top
Kibor
Отправлено: 28 Ноября, 2014 - 11:08:41
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




не.
разве что можно с pause... сделать...

если надо что б таймер работал в паузе паузу надо самому делать так примерно...

CODE:
my_pause(5000);



function my_pause(int pp)
{
int tim=gettime();
a: if (gettime()-tim>pp)return;
sleep(5);goto a;
}
 
 Top
nawigatr
Отправлено: 28 Ноября, 2014 - 16:56:07
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2014  
Репутация: 0




Спасибо,Владимир! Попробую...
 
 Top
yo1
Отправлено: 28 Ноября, 2014 - 17:54:54
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2014  
Репутация: 0




Требуется вписать в скрипт стоп\паузу\продолжить по нажатию комбинации клавиш. Sleep и pause приспособить не смог. Какие есть варианты? Главное условие в том, что бы скрипт не обрывался, а продолжил с остановленного места.
 
 Top
Страниц (10): [1] 2 3 4 5 6 7 8 9 » В конец
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by