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

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

91. Vramin - 01 Марта, 2022 - 03:20:26 - перейти к сообщению
Почитай описание функции таймера. Он при включении останавливает все остальное, выполняет код внутри себя, и потом передает выполнение обратно в точку на которой прервалось выполнение основного кода (если в коде в таймере не указан переход куда-то в другое место). Но, если речь о замене одного значения, то сделано это будет очень, очень быстро, и незаметно в плане простоя основного кода
92. wotres2 - 01 Марта, 2022 - 03:24:34 - перейти к сообщению
 Vramin пишет:
Почитай описание функции таймера. Он при включении останавливает все остальное, выполняет код внутри себя, и потом передает выполнение обратно в точку на которой прервалось выполнение основного кода (если в коде в таймере не указан переход куда-то в другое место). Но, если речь о замене одного значения, то сделано это будет очень, очень быстро, и незаметно в плане простоя основного кода

Из за описания и вопрос, это видимо самый оптимальный способ получается в моей задаче, т.к. нельзя прерывать или приостанавливать выполнения функции в любой момент, только определенном временном окне между их выполнением.
93. Kibor - 01 Марта, 2022 - 03:37:45 - перейти к сообщению
 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)
{
//код
}
}
94. wotres2 - 01 Марта, 2022 - 03:41:16 - перейти к сообщению
 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)
{
//код
}
}


Понял. Спасибо.
95. Vramin - 01 Марта, 2022 - 03:44:51 - перейти к сообщению
 wotres2 пишет:

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

Стоп. Так нужно что-то выполнить именно раз в икс минут, или выполнить нужно между "функция1" и "функция2"? Может как-то опишешь ближе к реалиям что нужно получить в итоге?
96. Kibor - 01 Марта, 2022 - 03:47:31 - перейти к сообщению
 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();
}
}
97. Zireael - 01 Марта, 2022 - 03:55:48 - перейти к сообщению
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;
}
98. Kibor - 01 Марта, 2022 - 04:03:30 - перейти к сообщению
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();
}
}
99. Zireael - 01 Марта, 2022 - 04:34:46 - перейти к сообщению
 Цитата:
Таймер будет вызываться и прерывать выполнение тела функций.

Возврат из таймера будет не в функцию?
100. Kibor - 01 Марта, 2022 - 04:47:39 - перейти к сообщению
 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();
}
}

Powered by ExBB FM 1.0 Final