Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Спящие часы / 25 сообщений из 28, страница 1 из 2
31.08.2021, 23:59
    #40094199
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Нужна идея часов, которые бы останавливались, когда компьютер спит ("гибернация" и т.п.).
Часы должны быть программным объектом, живущим и доступным в рамках приложения.
Спасибо.
...
Рейтинг: 0 / 0
01.09.2021, 00:06
    #40094200
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Ты уже проверил стандартные SetTimer, Sleep, WaitForSingleObject?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.09.2021, 00:08
    #40094201
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Dimitry Sibiryakov,

не-а.
...
Рейтинг: 0 / 0
01.09.2021, 00:17
    #40094204
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Фактически, нужна замена функции GetTickCount64().
...
Рейтинг: 0 / 0
01.09.2021, 00:38
    #40094207
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ
Фактически, нужна замена функции GetTickCount64().

А что не устраивает в этой функции?
...
Рейтинг: 0 / 0
01.09.2021, 01:11
    #40094214
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
softwarer,

да всё устраивает. Одна мелочь мешает: батарейка на системной плате. Когда компьютер спит, количество тиков увеличивается. Может, батарейку снять... :)
...
Рейтинг: 0 / 0
01.09.2021, 01:13
    #40094215
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Оно не зависит от батарейки.
https://docs.microsoft.com/en-us/windows/win32/sysinfo/acquiring-high-resolution-time-stamps#guidance-for-acquiring-time-stamps
Если тебе нужно только активное время, то
https://docs.microsoft.com/en-us/windows/win32/api/realtimeapiset/nf-realtimeapiset-queryunbiasedinterrupttime
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.09.2021, 01:14
    #40094216
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Dimitry Sibiryakov
Если тебе нужно только активное время, то
https://docs.microsoft.com/en-us/windows/win32/api/realtimeapiset/nf-realtimeapiset-queryunbiasedinterrupttime

Отлично, спасибо.
...
Рейтинг: 0 / 0
01.09.2021, 01:17
    #40094217
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ
Dimitry Sibiryakov
Если тебе нужно только активное время, то
https://docs.microsoft.com/en-us/windows/win32/api/realtimeapiset/nf-realtimeapiset-queryunbiasedinterrupttime

Отлично, спасибо.

Minimum supported client: Windows 7

:(
...
Рейтинг: 0 / 0
01.09.2021, 15:22
    #40094431
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Хочешь поддерживать окаменевшее дерьмо мамонта - лови сообшения питания и
переставай считать ручками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.09.2021, 15:47
    #40094451
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ
ъъъъъ
пропущено...

Отлично, спасибо.

Minimum supported client: Windows 7

:(
Для тебя, вот недавно наткнулся на рекламу и продажу. )
...
Рейтинг: 0 / 0
01.09.2021, 16:27
    #40094472
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ
Нужна идея часов, которые бы останавливались, когда компьютер спит ("гибернация" и т.п.).
Часы должны быть программным объектом, живущим и доступным в рамках приложения.
Спасибо.
С какой точностью мерить время сна надо?
...
Рейтинг: 0 / 0
01.09.2021, 17:48
    #40094512
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
rgreat
ъъъъъ
Нужна идея часов, которые бы останавливались, когда компьютер спит ("гибернация" и т.п.).
Часы должны быть программным объектом, живущим и доступным в рамках приложения.
Спасибо.
С какой точностью мерить время сна надо?

Странный вопрос. Измерять время сна не нужно.
...
Рейтинг: 0 / 0
01.09.2021, 17:54
    #40094518
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ,

Ок, подойдем с другой стороны.

С какой точностью надо (не)учитывать время сна в таймере.

Прям до тиков/мс, или там и секунд достаточно?
...
Рейтинг: 0 / 0
01.09.2021, 18:09
    #40094526
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
на плюсах
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
typedef struct _KSYSTEM_TIME {
  ULONG LowPart;
  LONG High1Time;
  LONG High2Time;
} KSYSTEM_TIME;
#define KUSER_SHARED_DATA 0x7ffe0000
#define InterruptTime ((KSYSTEM_TIME volatile*)(KUSER_SHARED_DATA + 0x08))
#define InterruptTimeBias ((ULONGLONG volatile*)(KUSER_SHARED_DATA + 0x3b0))

static LONGLONG readInterruptTime() {
  // Reading the InterruptTime from KUSER_SHARED_DATA is much better than
  // using GetTickCount() because it doesn't wrap, and is even a little quicker.
  // This works on all Windows NT versions (NT4 and up).
  LONG timeHigh;
  ULONG timeLow;
  do {
    timeHigh = InterruptTime->High1Time;
    timeLow = InterruptTime->LowPart;
  } while (timeHigh != InterruptTime->High2Time);
  LONGLONG now = ((LONGLONG)timeHigh << 32) + timeLow;
  static LONGLONG d = now;
  return now - d;
}

static LONGLONG scaleQpc(LONGLONG qpc) {
  // We do the actual scaling in fixed-point rather than floating, to make sure
  // that we don't violate monotonicity due to rounding errors.  There's no
  // need to cache QueryPerformanceFrequency().
  LARGE_INTEGER frequency;
  QueryPerformanceFrequency(&frequency);
  double fraction = 10000000/double(frequency.QuadPart);
  LONGLONG denom = 1024;
  LONGLONG numer = std::max(1LL, (LONGLONG)(fraction*denom + 0.5));
  return qpc * numer / denom;
}

static ULONGLONG readUnbiasedQpc() {
  // We remove the suspend bias added to QueryPerformanceCounter results by
  // subtracting the interrupt time bias, which is not strictly speaking legal,
  // but the units are correct and I think it's impossible for the resulting
  // "unbiased QPC" value to go backwards.
  LONGLONG interruptTimeBias, qpc;
  do {
    interruptTimeBias = *InterruptTimeBias;
    LARGE_INTEGER counter;
    QueryPerformanceCounter(&counter);
    qpc = counter.QuadPart;
  } while (interruptTimeBias != *InterruptTimeBias);
  static std::pair<LONGLONG,LONGLONG> d(qpc, interruptTimeBias);
  return scaleQpc(qpc - d.first) - (interruptTimeBias - d.second);
}

/// getMonotonicTime() returns the time elapsed since the application's first
/// call to getMonotonicTime(), in 100ns units.  The values returned are
/// guaranteed to be monotonic.  The time ticks in 15ms resolution and advances
/// during suspend on XP and Vista, but we manage to avoid this on Windows 7
/// and 8, which also use a high-precision timer.  The time does not wrap after
/// 49 days.
uint64_t getMonotonicTime()
{
  OSVERSIONINFOEX ver = { sizeof(OSVERSIONINFOEX), };
  GetVersionEx(&ver);
  bool win7OrLater = (ver.dwMajorVersion > 6 ||
      (ver.dwMajorVersion == 6 && ver.dwMinorVersion >= 1));
  // On Windows XP and earlier, QueryPerformanceCounter is not monotonic so we
  // steer well clear of it; on Vista, it's just a bit slow.
  return win7OrLater ? readUnbiasedQpc() : readInterruptTime();
}

...
Рейтинг: 0 / 0
01.09.2021, 18:10
    #40094529
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
rgreat,

несущественно. Скажем, пусть счетчик UInt64 увеличивается на 1 каждые 100 миллисекунд. Если он иногда будет инкрементироваться не через 100, а через (например) 200 миллисекунд - ничего страшного.
...
Рейтинг: 0 / 0
01.09.2021, 18:35
    #40094543
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
Я прошу прощения, а какая цель этих замеров? Чем не устраивает
Код: pascal
1.
Round(Now * MSecsPerDay)

?
...
Рейтинг: 0 / 0
01.09.2021, 18:36
    #40094544
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
_Vasilisk_,
Ему время без сна надо, а не просто время.
...
Рейтинг: 0 / 0
01.09.2021, 18:41
    #40094548
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ,

Если без хитрых функций WinAPI, то можно сделать цикл со sleep(x), который раз в X мсек, будет inc-ать прошедшее время с момента прошлого срабатывания, если разница в системном времени не слишком больше этих самых Х мсек.
...
Рейтинг: 0 / 0
01.09.2021, 18:41
    #40094549
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
rgreat
Ему время без сна надо
Так GetTickCount вернет именно время без сна. Но и она не устраивает
...
Рейтинг: 0 / 0
01.09.2021, 18:44
    #40094551
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
_Vasilisk_
Так GetTickCount вернет именно время без сна. Но и она не устраивает
Да? Точно?
Я не проверял.

Тогда вопрос закрыт.

Ты то про Now написал. А она-то как раз sleep не учитывает.
...
Рейтинг: 0 / 0
01.09.2021, 18:50
    #40094557
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
rgreat
Да? Точно?
Я не проверял.
Извините, неправильно прочитал фразу
ъъъъъ
Когда компьютер спит, количество тиков увеличивается.
на мои сообщения можно не обращать внимания
...
Рейтинг: 0 / 0
01.09.2021, 19:45
    #40094585
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
_Vasilisk_
rgreat
Ему время без сна надо
Так GetTickCount вернет именно время без сна. Но и она не устраивает

Вот тут https://docs.microsoft.com/en-us/windows/win32/sysinfo/windows-time пишут, что
авторThe elapsed time retrieved by GetTickCount or GetTickCount64 includes time the system spends in sleep or hibernation.
...
Рейтинг: 0 / 0
01.09.2021, 23:19
    #40094644
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
В отдельном треде бесконечный цикл, в котором тупой слип в течении заданного интервала (например, 100 миллисекунд) и интерлок-инкремент int64 переменной. В функции чтения - интерлок-эксчандж, результат умножаю на значение интервала. Для пущей независимости от нагрузки приложения треду задан чуть более высокий приоритет.
Сойдет, т.к. задача решена.
...
Рейтинг: 0 / 0
02.09.2021, 00:34
    #40094653
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Спящие часы
ъъъъъ,

Осталось понять нафига там интерлок?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Спящие часы / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]