1

Тема: Время в мск от указанного события

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

EnvSub, var, 1970, Seconds

и смотреть их разницу.
Но это в секундах. А мне надо более точно, в миллисекундах. Возможно ли повысить точность средствами AHK?

2

Re: Время в мск от указанного события

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Turambar, 2016-05-03 21:49:26)

Re: Время в мск от указанного события

teadrinker пишет:

Выразите оба события в милисекундах

Вот в этом и проблема. Как их выразить то?
Между этими событиями должно проходить 1,5-3 секунды. Тупо умножив результат EnvSub на тысячу я получу "грязные миллисекунды" с погрешностью от 0 до 999 мск, а погрешность почти в 1 секунду никак недопустима. AHK должен изначально считать в мск от какой-то исходной даты. Но возможно ли это?

Пример:
Событие в произошло в 15:29:00 999 мск. Если я умножу секунды на тысячу, я потеряю эти 999 мск.

4 (изменено: serzh82saratov, 2016-05-03 22:25:56)

Re: Время в мск от указанного события

Есть например переменные A_MSec или A_TickCount:

Loop 10
	MsgBox, , , % A_Min ":" A_Sec ":" A_MSec, 0.3
	
Start := A_TickCount
Loop 10
	MsgBox, , , % "Прошло: " A_TickCount - Start, 0.3 

Или просто установить таймер если удобно:

MsgBox, , , % "Через 555 msec появится другой MsgBox", 0.3
SetTimer, NextEvent, -555
Start := A_TickCount
Return

NextEvent:
	MsgBox % "Прошло: " A_TickCount - Start
	Return 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: Время в мск от указанного события

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: Время в мск от указанного события

Turambar, ничего не понял. Зачем на тысячу умножать-то? Знаете, сколько в секунде милисекунд? Сколько в минуте секунд? Сколько в часе минут? И т. д. Перемножьте всё это, получите время события в милисекундах. Потом от одного отнимите другое. Привёл бы пример, да не знаю, в каком формате вы записываете время события.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: Время в мск от указанного события

teadrinker пишет:

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

Хотя тут не совсем понятно. Сначала коллега Turambar приводит в пример:

EnvSub, var, 1970, Seconds

Потом говорит

Между этими событиями должно проходить 1,5-3 секунды.

Не ясно, оба события происходят в одной сессии, или нет?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: Время в мск от указанного события

teadrinker пишет:

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

Думаю тут милисекунды уже не понадобятся, но если уже приспичило, я упоминал и про A_MSec.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: Время в мск от указанного события

serzh82saratov пишет:

я упоминал и про A_MSec

А как она поможет?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: Время в мск от указанного события

Как то так:

Start := A_Now A_MSec
Sleep 1234

Date := SubStr(Start, 1, -3)
MSec := SubStr(Start, -2) 
Odds -= Date, Seconds
MsgBox % (Odds * 1000) + (A_MSec - MSec)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11 (изменено: Turambar, 2016-05-04 01:47:24)

Re: Время в мск от указанного события

Благодарю за ответы. Завтра буду думать и пробовать.

Что касается очерёдности выполнения: идёт первое действие, а ниже идёт куча циклов, чтений файлов, скачивание в файл и тп. Далее, если всё это прошло более чем за 2350 мск от первого действия, то выполняется второе действие. Если менее, то Sleep на остаток и выполнить второе действие.

Что касается даты: 1970 - начало эпохи UNIX, взято от балды, просто как некая точка отсчёта секунд.

12

Re: Время в мск от указанного события

Тогда A_MSec не понадобится. Достаточно

period := 1500
start := A_TickCount
; действия
if (A_TickCount - start < period)
	Sleep, period + start - A_TickCount
MsgBox, % A_TickCount - start
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder