Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

bug в wait

Post Reply
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

bug в wait

Post by CFA »

дело в том что wait(N) дает задержку совсем не N миллисекунд, а заметно больше. и чем больше N тем больше погрешность.

вот скрипт

Code: Select all

var t : double;
begin
	t := now;
	wait(45000);
	t := now-t;

	addToSystemJournal(floatToStr((t)*86400000));
end.
вот его лог -

Code: Select all

1:12:15 []: Compiling
1:12:15 []: Compiled succesfully
1:13:13 []: 57830,9998149052
1:13:13 []: Succesfully executed
1:13:13 []: Script dummy.ssc stoped successfuly

1:13:45 []: Compiling
1:13:45 []: Compiled succesfully
1:14:45 []: 60034,9998800084
1:14:45 []: Succesfully executed
1:14:45 []: Script dummy.ssc stoped successfuly
бага наблюдаецо в rc1, в 0.95 погрешность тоже есть, но незначительная.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Честно говоря, нет желания проверять твои вычисления с плавающей запятой, выведи при помощи:

Code: Select all

Function TimeToStr(Time: TDateTime): String;

Преобразовывает время из формата TDateTime в строковое представление.

Преобразование использует формат, определенный в глобальной переменной LongTimeFormat. Вы можете изменять формат отображения времени, изменяя значения переменных даты и времени (или используя Панель управления Windows).
Если эта функция есть... По идее, должна быть. Если вдруг нет, то:

Code: Select all

Procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);

Извлекает время из формата TDateTime и помещает часы, минуты, секунды, и миллисекунды соответственно в переменные Hour, Min, Sec и MSec.
Эта точно есть.
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

Какие вычисления?
по простому логу видно что скрипт стартует в первом случае в 1:12:15, заканчиваеться в 1:13:13 - это 58 сек
во стором случае стартует в 1:13:45, а заканчиваеться в 1:14:45 - это 60 сек, что и подтверждаеться вычислениями. часы на компутере у меня идут весьма точно.
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Проверю.
MeXaon
Posts: 4
Joined: 08.03.2008 22:08

Post by MeXaon »

а проблема актуальна до сих пор ;)

Stealth_v1.0 (RC 3)
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

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

Code: Select all

procedure mWait(n : integer);
var waitTime : TDateTime;
begin
   waitTime := now + double(n) / 86400000;
   while (now < waitTime) do wait(10);
end;
MeXaon
Posts: 4
Joined: 08.03.2008 22:08

Post by MeXaon »

Ну я если честно даже не представляю где нужная настолько точная задержка во времени, ведь есть лаги... СВСы ... и т.д.

Я просто констатировал факт, что вместо ожидания 10 минут, он ждал 11+
Post Reply