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

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

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

> Описание: Добавление функции таймера (код выполняемый по времени)
Zireael
Отправлено: 24 Марта, 2021 - 00:29:44
Post Id



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


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




 Цитата:
Поправил алгоритм. Теперь не должно обрезать выполнение таймера.

Это осталось актуальным?:
 Цитата:
Не используйте в таймере функции которые используете в коде.
 
 Top
Kibor
Отправлено: 24 Марта, 2021 - 01:01:26
Post Id



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


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




 Zireael пишет:
Это осталось актуальным?:
Цитата:
Не используйте в таймере функции которые используете в коде.

Актуальным если используются в них переменные.
 
 Top
Zireael
Отправлено: 24 Марта, 2021 - 01:53:22
Post Id



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


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




 Цитата:
Актуальным если используются в них переменные.

К wm_timer это не относится?
 
 Top
Kibor
Отправлено: 24 Марта, 2021 - 02:33:55
Post Id



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


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




Это относится не к таймеру, а к тому что переменные не являются уникальными при вызове одной функции одновременно.
 
 Top
Nikanr
Отправлено: 28 Марта, 2021 - 17:42:09
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 231
Дата рег-ции: Март 2019  
Репутация: 5




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

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;
}

(Отредактировано автором: 28 Марта, 2021 - 17:42:43)

 
 Top
Denci
Отправлено: 21 Апреля, 2021 - 22:16:20
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 15
Дата рег-ции: Март 2015  
Репутация: 0




Запишу себе тут функции использования пауз (также пригодится новичкам). Если в коде вашей программы используются таймеры (например, для отслеживания состояния кнопок клавиатуры), то придется отказаться от стандартных функций паузы 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;}

(Отредактировано автором: 21 Апреля, 2021 - 22:18:26)

 
 Top
Zireael
Отправлено: 22 Апреля, 2021 - 01:44:34
Post Id



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


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




 Цитата:
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);
}
 
 Top
lavpochta
Отправлено: 08 Октября, 2021 - 06:35:46
Post Id



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


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




Здравствуйте.
В программе на таймере стоит прерывание бота по нажатию комбинации клавиш. При отладке вызываю функцию messagebox (программа создана в визуальном редакторе). Таймер, пока висит диалоговое окно, не откликается на нажатие клавиш. И после закрытия окна тоже... Только Ctrl+Shift+Z помогает. Это так и должно быть?
Как вариант, таймер стопить перед messagebox, а потом запускать?
 
 Top
Zireael
Отправлено: 08 Октября, 2021 - 11:13:17
Post Id



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


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




 Цитата:
Таймер, пока висит диалоговое окно, не откликается на нажатие клавиш.

Messagebox приостанавливает поток, который его вызвал, т. е. пока открыто окно сообщения скрипт не работает.
 
 Top
wotres2
Отправлено: 01 Марта, 2022 - 11:08:09
Post Id



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


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




Доброго времени.
Вопрос:
Нужно вставить реализацию таймера 1 раз в 30 минут нажатие клавиши X только в промежутке между функциями.
Код не напишу, т.к. не хватит мозгов, в визуальном редакторе создам.
Будет ли работать концепция:
таймер 1 раз в 30 минут дает значение глобально переменной 10, между функциями вставлена функция с логикой при которой вышеупомянутая переменная =10 то он нажимает клавишу и сбрасывает её на 0, если нет идет дальше своего рода ожидая значения переменной которую таймер присвоит 1 раз в 30 минут?
Чем руководствуюсь: максимальное ограничение и конкретизация условий выполнения функций, без вмешательства в работу отдельных функций выполнения эмуляции.
 
 Top
Страниц (10): В начало « 2 3 4 5 6 7 8 [9] 10 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by