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

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

 Страниц (10): В начало « 2 3 4 5 6 7 8 9 [10]   

> Описание: Добавление функции таймера (код выполняемый по времени)
Vramin
Отправлено: 01 Марта, 2022 - 11:20:26
Post Id



Пользователь
Наблюдатель


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




Почитай описание функции таймера. Он при включении останавливает все остальное, выполняет код внутри себя, и потом передает выполнение обратно в точку на которой прервалось выполнение основного кода (если в коде в таймере не указан переход куда-то в другое место). Но, если речь о замене одного значения, то сделано это будет очень, очень быстро, и незаметно в плане простоя основного кода
 
 Top
wotres2
Отправлено: 01 Марта, 2022 - 11:24:34
Post Id



Пользователь
Наблюдатель


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




 Vramin пишет:
Почитай описание функции таймера. Он при включении останавливает все остальное, выполняет код внутри себя, и потом передает выполнение обратно в точку на которой прервалось выполнение основного кода (если в коде в таймере не указан переход куда-то в другое место). Но, если речь о замене одного значения, то сделано это будет очень, очень быстро, и незаметно в плане простоя основного кода

Из за описания и вопрос, это видимо самый оптимальный способ получается в моей задаче, т.к. нельзя прерывать или приостанавливать выполнения функции в любой момент, только определенном временном окне между их выполнением.
 
 Top
Kibor
Отправлено: 01 Марта, 2022 - 11:37:45
Post Id



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


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




 wotres2 пишет:
без вмешательства в работу отдельных функций выполнения эмуляции.

В начале функции отключить таймер. При выходе включить.
Или еще лучше переменной делать, что бы не сбрасывать таймер.

CODE:
int TIM=1;

enabletimer(0);

loop()
{
//код
f1();
//код
f2();
//код
}

function f1()
{
TIM=0;
//код
TIM=1;
}

function f2()
{
TIM=0;
//код
TIM=1;
}

CREATE_TIMER(0, 1000)//Номер таймера, выполнение таймера через мсек.
{
if (TIM)
{
//код
}
}
 
 Top
wotres2
Отправлено: 01 Марта, 2022 - 11:41:16
Post Id



Пользователь
Наблюдатель


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




 Kibor пишет:
 wotres2 пишет:
без вмешательства в работу отдельных функций выполнения эмуляции.

В начале функции отключить таймер. При выходе включить.
Или еще лучше переменной делать, что бы не сбрасывать таймер.

CODE:
int TIM=1;

enabletimer(0);

loop()
{
//код
f1();
//код
f2();
//код
}

function f1()
{
TIM=0;
//код
TIM=1;
}

function f2()
{
TIM=0;
//код
TIM=1;
}

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


Понял. Спасибо.
 
 Top
Vramin
Отправлено: 01 Марта, 2022 - 11:44:51
Post Id



Пользователь
Наблюдатель


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




 wotres2 пишет:

Из за описания и вопрос, это видимо самый оптимальный способ получается в моей задаче, т.к. нельзя прерывать или приостанавливать выполнения функции в любой момент, только определенном временном окне между их выполнением.

Стоп. Так нужно что-то выполнить именно раз в икс минут, или выполнить нужно между "функция1" и "функция2"? Может как-то опишешь ближе к реалиям что нужно получить в итоге?
 
 Top
Kibor
Отправлено: 01 Марта, 2022 - 11:47:31
Post Id



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


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




 wotres2 пишет:
Понял. Спасибо.

 wotres2 пишет:
Нужно вставить реализацию таймера 1 раз в 30 минут


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

Надо немного доработать..
CODE:
int TIM=1;
int ttimer=gettime();

enabletimer(0);

loop()
{
//код
f1();
//код
f2();
//код
}

function f1()
{
TIM=0;
//код
TIM=1;
}

function f2()
{
TIM=0;
//код
TIM=1;
}

CREATE_TIMER(0, 1000)//Номер таймера, выполнение таймера через мсек.
{
if (TIM && gettime()-ttimer>180000)
{
//код
ttimer=gettime();
}
}
 
 Top
Zireael
Отправлено: 01 Марта, 2022 - 11:55:48
Post Id



Пользователь
Эксперт


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




CODE:
int TIM=0;
enabletimer(0);

loop()
{
f1(); // функция 1
if(TIM==1) // если значение переменной равно 1
{
messagebox("X");
TIM=0;
}
f2(); // функция 2
sleep(100);
}

function f1()
{
}

function f2()
{
}

CREATE_TIMER(0, 5000) // каждые 5 секунд присвоить значение переменной
{
TIM=1;
}
 
 Top
Kibor
Отправлено: 01 Марта, 2022 - 12:03:30
Post Id



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


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




Zireael , Это не соответствует условию. Таймер будет вызываться и прерывать выполнение тела функций.

Демонстрация:
CODE:
int TIM=0;
enabletimer(0);

loop()
{
f1(); // функция 1
if(TIM==1) // если значение переменной равно 1
{
messagebox("X");
TIM=0;
}
f2(); // функция 2
sleep(100);
}

function f1()
{
messagebox("f1_1");
messagebox("f1_2");
}

function f2()
{
messagebox("f2_1");
messagebox("f2_2");
}

CREATE_TIMER(0, 2000) // каждые 5 секунд присвоить значение переменной
{
TIM=1;
messagebox("CREATE_TIMER");
}

(Добавление)
Проверка что таймер не вмешивается когда функция выполняется..

CODE:
int TIM=1;
int ttimer=gettime();

enabletimer(0);

loop()
{
//код
looptime(2000)sleep(100);
f1();
//код
looptime(2000)sleep(100);
f2();
//код
looptime(2000)sleep(100);
}

function f1()
{
TIM=0;
messagebox("f1_1");
looptime(1000)sleep(100);
messagebox("f1_2");
TIM=1;
}

function f2()
{
TIM=0;
messagebox("f2_1");
looptime(1000)sleep(100);
messagebox("f2_2");
TIM=1;
}

CREATE_TIMER(0, 100)//Номер таймера, выполнение таймера через мсек.
{
if (TIM==1 && gettime()-ttimer>500)
{
messagebox("CREATE_TIMER");
ttimer=gettime();
}
}
 
 Top
Zireael
Отправлено: 01 Марта, 2022 - 12:34:46
Post Id



Пользователь
Эксперт


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




 Цитата:
Таймер будет вызываться и прерывать выполнение тела функций.

Возврат из таймера будет не в функцию?
 
 Top
Kibor
Отправлено: 01 Марта, 2022 - 12:47:39
Post Id



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


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




 Zireael пишет:
Возврат из таймера будет не в функцию?

Он может стартовать до TIM=0; и после TIM=1;
Теоретически может в функцию. Но прерывать само тело функции не будет.
(Добавление)
Можно так сделать
CODE:
int TIM=1;
int ttimer=gettime();

enabletimer(0);

loop()
{
//код
looptime(2000)sleep(100);
TIM=0; f1(); TIM=1;
//код
looptime(2000)sleep(100);
TIM=0; f2(); TIM=1;
//код
looptime(2000)sleep(100);
}

function f1()
{
messagebox("f1_1");
looptime(1000)sleep(100);
messagebox("f1_2");
}

function f2()
{
messagebox("f2_1");
looptime(1000)sleep(100);
messagebox("f2_2");
}

CREATE_TIMER(0, 100)//Номер таймера, выполнение таймера через мсек.
{
if (TIM==1 && gettime()-ttimer>500)
{
messagebox("CREATE_TIMER");
ttimer=gettime();
}
}
 
 Top
Страниц (10): В начало « 2 3 4 5 6 7 8 9 [10]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by