Page 1 of 1
использовать что-то раз в n секунд
Posted: 27.02.2006 11:15
by L'inconnu
скажем надо раз в 30 секунд что-то сделать, обычно я запоминаю текущее время в какой-нибудь переменной, и по ходу скрипта проверяю не стало ли текущее время больше переменной + n
а тут что-то я запустался, вот пример:
program Time;
var my_timer : TDateTime;
Begin
AddToSystemJournal(TimeToStr(Time));
my_timer := Time + 60/86400;
AddToSystemJournal(TimeToStr(my_timer));
End.
дни вроде бы накручивает, а вот секунды ну никак, выводит одно и то же время:
12:10:42: 12:10:42
12:10:42: 12:10:42
Posted: 27.02.2006 11:23
by Miralex
Используй лучше Timer.
Например так:
Code: Select all
program Time;
var ItemIDTime : Cardinal;
Dager : Cardinal;
{$Include 'all.inc'}
Begin
WaitConnection(3000);
Dager := FindType($0F51, BackPack);
if (Dager = 0) then
begin
AddToSystemJournal('Dager not finded');
Exit;
end;
SetARStatus(true);
ItemIDTime := 0;
while true do
begin
WaitConnection(3000);
{Item ID by timer}
if ((Timer > (ItemIDTime + (11 * 1000))) or (ItemIDTime = 0)) then
begin
UseSkill('item identification');
WaitTargetObject(Dager);
ItemIDTime :=Timer;
end;
wait(500);
end;
End.
Posted: 27.02.2006 11:57
by L'inconnu
сенькс, в шпаргалке "попытка создать полный список всего чего может стелс" его не нашел просто.
Posted: 26.09.2006 16:25
by Acronym
Timer : Cardinal - Число, меняющееся каждую миллисекунду.
Каково происхождение этого числа?
Выводил в AddToSystemJournal его значения,
числа порядка - 22895921.
ПС. К самой функции претензий не имею, за равные промежутки времени
значение изменялось на равные значения.
Posted: 26.09.2006 18:02
by Alex
воспринимай его просто как число которое меняеться

Posted: 27.09.2006 7:50
by Miralex
Posted: 28.09.2006 15:26
by Acronym
Спасибо, Miralex, обязательно прочитаю.
Меня интересовала средняя продолжительность цикла в тех или иных скриптах, а как сделать через timer я не понял. Придумалось конвертировать системное время в секунды, фиксировать значения и пользовать полученную разницу.
Время конвертировал следующим:
Code: Select all
procedure TimeInSeconds(out t : Integer);
var
TL : TStringList;
begin
TL := TStringList.Create;
StrBreakApart(TimeToStr(Now), ':', TL);
if TL.Count > 0 then
begin
t := ((StrToInt(TL.Strings[0]) * 3600) + (StrToInt(TL.Strings[1]) * 60) + (StrToInt(TL.Strings[2])));
end;
TL.Free;
end;
На выходе получал
t : Integer в секундах.
Если не использовать на смене суток, то получаем более менее точные данные.
PS. Это случайно не придумывание велосипеда?
Posted: 28.09.2006 16:25
by Miralex
Это велосипед.
Легче запомнить состояние таймера до тестируемого блока и после. Дальше вычислишь разность - это и будет время работы (мс) твоего тестируемого блока.