PDA

Просмотр полной версии : Время между повторами в отправке пакета


xxxTorlofxxx
15.01.2009, 21:06
Обьясните нубу, как сделать(в WPF) чтобы скрипт, скажем вот такой:

BEGIN
gSys.EnSendS(HStr('1900D0090001000000104E6240D3130 0000100000008070000'));
gSys.EnSendS(HStr('1900D0090001000000104E6240D3130 0000100000008070000'));
END.

отправлялся на сервер кажные 100мс?

Ivan_32
16.01.2009, 06:12
Там разве нет что то типа wait или sleep ? К сожалению нормальной спецификации саур на функции не сделал. Но я думаю что такой код заработает:

BEGIN
while true do
BEGIN
gSys.EnSendS(HStr('1900D0090001000000104E6240D3130 0000100000008070000'));
sleep(100);
gSys.EnSendS(HStr('1900D0090001000000104E6240D3130 0000100000008070000'));
END;
END.

или же вместо sleep(100); поставить wait(100);
Если я правильно думаю то у FS(FastScript) используется паскалевский синтаксис.
Спецификация FastScript ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

Leo_ня
16.01.2009, 10:07
Теперь понятно, как саурон туда скриптовую систему воткнул XD

Глюконатор
16.01.2009, 21:37
Спецификацию саур сделал. Она есть в архиве WPF с его сайта и была еще алчитсе. Есть она там щас или нет - я хз.

Как таковая задержка скрипта в ФС есть - gSys.sleep(ms); Где ms - задержка в миллисекундах. Но использовать ее лучше не стоит, ибо тормозится не токлько выполнение самого скрипта но и всего потока, к которому он прикреплен. Другими словами, пока не кончится задержка клиент не получит и не отправит ни единого пакета. Зато есть шикарные таймеры. О них ниже.
А вот и сам скриптег:

function OnTimer(nt,cnt : integer) : boolean;
begin
gSys.EnSendS(HStr('1900D0090001000000104E6240D3130 0000100000008070000'));
gSys.EnSendS(HStr('1900D0090001000000104E6240D3130 0000100000008070000'));
result := true;
end;

BEGIN
gSys.SetTimer(1,100);
END.

-----------------------------------

gSys.SetTimer(1,100);
Запускает первый таймер (всего три таймера на каждый скрипт) c задержкой в 100 мс.
-----------------------------------
function OnTimer(nt,cnt : integer) : boolean;
begin
...
result := true;
end;
Функция обработки события таймера. Тут nt=[1,2,3] - номер таймера, вызвавшего событие, cnt - номер срабатывания таймера. После обнуления таймера этот счетчик сбрасывается.
Если хотим чтобы таймер работал дальше пишем в конце result := true; или result := false; дабы таймер остановился. После этой остановки счетчик срабатываний тоже обнуляется.

Добавлено через 5 минут
ЗЫ Код Ивана пахать не будет.. Точнее работать он будет но не будет пропускать пакеты.