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

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

81. Zireael - 23 Марта, 2021 - 17:29:44 - перейти к сообщению
 Цитата:
Поправил алгоритм. Теперь не должно обрезать выполнение таймера.

Это осталось актуальным?:
 Цитата:
Не используйте в таймере функции которые используете в коде.
82. Kibor - 23 Марта, 2021 - 18:01:26 - перейти к сообщению
 Zireael пишет:
Это осталось актуальным?:
Цитата:
Не используйте в таймере функции которые используете в коде.

Актуальным если используются в них переменные.
83. Zireael - 23 Марта, 2021 - 18:53:22 - перейти к сообщению
 Цитата:
Актуальным если используются в них переменные.

К wm_timer это не относится?
84. Kibor - 23 Марта, 2021 - 19:33:55 - перейти к сообщению
Это относится не к таймеру, а к тому что переменные не являются уникальными при вызове одной функции одновременно.
85. Nikanr - 28 Марта, 2021 - 09:42:09 - перейти к сообщению
А так можно: вызывать функции из таймера которые в основном коде. Перезапись переменных произойдет,функция отработает, но управление уже не вернется в ту функцию, которую прервал таймер и использовал?

CODE:
int x = 0;

enabletimer(0);

me:;

a();

function a(){

loop(){

x = x + b(1);

textout(0, 184, 571, format(x), 1);

looptime(200)pause(1);
}


}


function b(int c){

return c;

}

CREATE_TIMER(0, 200){

x = x + b(1000000);

goto me;

}

(Добавление)
Извините за кривой вопрос. Перефразирую: можно ли вызвать дополнительную функцию add() в таймере, пока идет её выполнение в основной функции test(). По итогу разобрался. Если запустить отладчик, выставить галочки: сканировать значения переменных, пауза между командами 100мс и показать лог в реальном времени, то при коменте "goto me;" вместо -2 будет периодически появляться 200.

CODE:
int h = 0;

enabletimer(3);

me:;

test();

function test(){

loop()textout(1, 302, 512, format(add(-1, -1)), 1);
}

function add(int c, int g){

return c + g;
}

CREATE_TIMER(3, 1000){

textout(0, 269, 621, format(add(100, 100)), 1);

goto me;
}
86. Denci - 21 Апреля, 2021 - 14:16:20 - перейти к сообщению
Запишу себе тут функции использования пауз (также пригодится новичкам). Если в коде вашей программы используются таймеры (например, для отслеживания состояния кнопок клавиатуры), то придется отказаться от стандартных функций паузы pause() и sleep() и заменить, допустим, на готовый пример:
CODE:
pause_sec(10); //пауза 10 секунд
pause_mssec(10); //пауза 10 миллисекунд
function pause_sec(int s){int t1=gettime(),t2=t1;a:t1=gettime();if((t1-t2)<1000*s) goto a;}
function pause_mssec(int mss){int t1=gettime(),t2=t1;a:t1=gettime();if((t1-t2)<mss)goto a;}
87. Zireael - 21 Апреля, 2021 - 17:44:34 - перейти к сообщению
 Цитата:
function pause_mssec(int mss){int t1=gettime(),t2=t1;a:t1=gettime();if((t1-t2)<mss)goto a;}

Проще так:
CODE:
pause_mssec(10); //пауза 10 миллисекунд

function pause_mssec(int mss)
{
looptime(mss)sleep(1);
}
88. lavpochta - 07 Октября, 2021 - 22:35:46 - перейти к сообщению
Здравствуйте.
В программе на таймере стоит прерывание бота по нажатию комбинации клавиш. При отладке вызываю функцию messagebox (программа создана в визуальном редакторе). Таймер, пока висит диалоговое окно, не откликается на нажатие клавиш. И после закрытия окна тоже... Только Ctrl+Shift+Z помогает. Это так и должно быть?
Как вариант, таймер стопить перед messagebox, а потом запускать?
89. Zireael - 08 Октября, 2021 - 03:13:17 - перейти к сообщению
 Цитата:
Таймер, пока висит диалоговое окно, не откликается на нажатие клавиш.

Messagebox приостанавливает поток, который его вызвал, т. е. пока открыто окно сообщения скрипт не работает.
90. wotres2 - 01 Марта, 2022 - 03:08:09 - перейти к сообщению
Доброго времени.
Вопрос:
Нужно вставить реализацию таймера 1 раз в 30 минут нажатие клавиши X только в промежутке между функциями.
Код не напишу, т.к. не хватит мозгов, в визуальном редакторе создам.
Будет ли работать концепция:
таймер 1 раз в 30 минут дает значение глобально переменной 10, между функциями вставлена функция с логикой при которой вышеупомянутая переменная =10 то он нажимает клавишу и сбрасывает её на 0, если нет идет дальше своего рода ожидая значения переменной которую таймер присвоит 1 раз в 30 минут?
Чем руководствуюсь: максимальное ограничение и конкретизация условий выполнения функций, без вмешательства в работу отдельных функций выполнения эмуляции.

Powered by ExBB FM 1.0 Final