Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 3.33 Добавление функции таймера (код выполняемый по времени)

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

1. Kibor - 25 Ноября, 2014 - 12:03:37 - перейти к сообщению
Добавлен Таймер.
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);//Никогда не выполнится
}

2. Stanislaw - 25 Ноября, 2014 - 21:30:12 - перейти к сообщению
enabletimer - это получается функция с периодической задержкой по таймеру. Просто иногда нужно обозначить какой то блок кода который бы пропускался какое то время при срабатывании определенных условий. Тут другое. Спасибо за новую конструкцию,ей можно будет разгрузить процессор такие вещи как автоподключение, проверка редких, некритических событий и пр.
3. Kibor - 25 Ноября, 2014 - 23:19:12 - перейти к сообщению
 Stanislaw пишет:
обозначить какой то блок кода который бы пропускался какое то время при срабатывании определенных условий

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

}
}
4. Bubblegum - 26 Ноября, 2014 - 07:32:59 - перейти к сообщению
Поправьте, если я неправильно понял. Заключенная в CREATE_TIMER{n} последовательность выполняется каждые n секунд? Отслеживание таймера параллельно с основной программой? Т.е. каждые n секунд управление передается в этот таймер независимо от того на каком этапе выполнения основного кода я нахожусь?

Если все так, то это же супер функционал для постоянного независимого отслеживания различных событий независимо от места выполнения основной программы!
5. Kibor - 26 Ноября, 2014 - 07:38:43 - перейти к сообщению
да. так.
(Добавление)
 Цитата:
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;
}
6. Bubblegum - 26 Ноября, 2014 - 08:11:41 - перейти к сообщению
Спасибо, такой функционал очень нужен.
7. nawigatr - 28 Ноября, 2014 - 02:54:13 - перейти к сообщению
Во время исполнения функций pause() и sleep() таймер не работает( в частности слежение за нажатием клавиш. Можно сделать что бы и при исполнении этих функций таймер работал?
8. Kibor - 28 Ноября, 2014 - 03:08:41 - перейти к сообщению
не.
разве что можно с pause... сделать...

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

CODE:
my_pause(5000);



function my_pause(int pp)
{
int tim=gettime();
a: if (gettime()-tim>pp)return;
sleep(5);goto a;
}
9. nawigatr - 28 Ноября, 2014 - 08:56:07 - перейти к сообщению
Спасибо,Владимир! Попробую...
10. yo1 - 28 Ноября, 2014 - 09:54:54 - перейти к сообщению
Требуется вписать в скрипт стоп\паузу\продолжить по нажатию комбинации клавиш. Sleep и pause приспособить не смог. Какие есть варианты? Главное условие в том, что бы скрипт не обрывался, а продолжил с остановленного места.

Powered by ExBB FM 1.0 Final