Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Таймер - зардержки при отправке пакетов

-

Скрипты и перехват пакетов

- Скрипты и перехват пакетов

Ответ
 
Опции темы
Старый 31.08.2010, 00:23   #1
NoItemName
 Рыцарь
Аватар для J-Fobos
 
J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(J-Fobos сломал счётчик популярности :(
Регистрация: 12.04.2009
Сообщений: 394
Популярность: 47903
Сказал(а) спасибо: 515
Поблагодарили 1,124 раз(а) в 430 сообщениях
 
По умолчанию Таймер - зардержки при отправке пакетов

Довольно много вопросов по использованию таймера. Создам специально тему, что бы они больше не поднимались.

В большинстве случаев таймер используется для отправки пакетов с заданным интервалом или для отправки пакетов с задержкой.

Начнем.

Сначала надо объявить переменную типа TTimer глобально, на весь скрипт:

Код:
var
   Timer01: TTimer;
Далее в процедуре Init, что вызывается при запуске скрипта, надо (грубо говоря) выделить таймеру память и задать начальные параметры:

Код:
procedure Init;
begin
   Timer01:=TTimer.Create(nil); //выделяем память и т.п.
   Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
   Timer01.enabled:=true; //начальное положение включен(true)/выключен(false)
   Timer01.interval:=500; //интервал(в миллисекундах) как часто таймер срабатывает
end;
После этого надо написать процедуру
Код:
procedure OnTimer01(Sender: TObject);
begin
//тут набор команд, которые будут
//выполняться каждый раз, когда таймер сработает
end;
Более подробно можно прочесть в книжках по ObjectPascal.

=========================

Для отправки нескольких пакетов с заданным интервалом (не обязательно чтоб интервал был одинаковый) в наборе команд, которые будут выполняться каждый раз, когда таймер сработает надо вписать код

Код:
case TimerCyrcle of
1: Begin {набор команд}  End;
2: Begin {набор команд}  End;
3: Begin {набор команд}  End;
//4.. 5.. 6.. сколько надо
else 
Begin 
TimerCyrcle:=1;
Timer01.enabled:=false;
End;
End;
Inc(TimerCyrcle);
Только не забудьте глобально объявить переменную TimerCyrcle как integer, а также задать ее начальное значение перед запуском таймера.
В любой момент можно использовать команду Timer01.interval:=1000; для изменения интервала срабатывания таймера.

Желаю удачи в использовании таймера.

=========== Дополнено ===============
Информация выше была для скриптов пакетхака, но кроме него есть еще и викед патчер. Рассмотрим работу таймера и в этой программе.

В скриптах для ВП нет возможности создать такой объект как таймер, но есть функция-событие OnTimer которая работает почти так как нам надо. Принцип использования немного сложный для понимания из за своей нестандартности.
Функция вызывается уже встроенным таймером посредством функции gSys.SetTimer

Пример использования (взят из официальной документации):
Код:
function OnTimer(ntimer, count : integer) : boolean;
// ntimer - номер таймера (1..3) который вызвал это событие.
// count - счетчик срабатываний для данного таймера, сбрасывается при SetTimer;
begin
  result := true; // false - остановит данный таймер
...
end;
Установка таймеров:
gSys.SetTimer(ntimer, interval : integer;[nscript : integer]);
установка таймера 'ntimer' (1..3) с интервалом 'interval' ms.
Всего можно использовать до 15-ти таймеров (по 5 на каждый скрипт).
'nscript' - номер скрипта, по умолчанию он соответствует текущему скрипту.
Установка интервала в 0 - выключает таймер, порог точности ~15ms.
Пример:
gSys.SetTimer(1,300); // установит вызов 'OnTimer(1)' каждые 300ms (0.3сек)
gSys.SetTimer(1,0); // остановить таймер 1


============================
Если возникает необходимость использовать большое количество таймеров (лично я с таким никогда не сталкивался), то посмотрите пример который идет в комплекте программой
Код:
procedure OnCreate;
begin
  gSys.SetTimer(1,1000); // устанавливаем первый таймер каждую секунду
  gSys.SetTimer(2,300); // устанавливаем второй таймер каждые 300ms (0.3 секунды)
end;

procedure OnDestroy;
begin
  gSys.SetTimer(1,0); // останавливаем таймер 1
  gSys.SetTimer(2,0); // останавливаем таймер 2
end;

function OnTimer(nt,cnt : integer) : boolean;
begin
  result := true;
  writelogln(format('таймер %d вызвался %d-й раз',[nt,cnt]));
end;


begin
  // тут тело скрипта.
end.
________________

В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';

Последний раз редактировалось J-Fobos; 19.10.2010 в 19:41. Причина: добавил информацию
  Ответить с цитированием
9 пользователя(ей) сказали cпасибо:
Ботоводище123 (09.08.2011), AnotherTest (06.07.2011), BioDread (14.03.2011), cavern (28.01.2011), Chipito (27.11.2010), dynya (10.01.2011), happytorn (05.02.2012), PavelQwa (31.08.2010), vs23 (30.01.2012)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как остановить таймер tolctiak2007 Cabal Online 4 01.08.2009 16:41
Время между повторами в отправке пакета xxxTorlofxxx Общение и обсуждение, архив Lineage 2 3 16.01.2009 21:37

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 04:07.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net