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)
{
//код
}
}
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)
{
//код
}
}
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();
}
}
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;
}
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");
}
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();
}
}
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();
}
}
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();
}
}