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

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

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

да всё устраивает. Одна мелочь мешает: батарейка на системной плате. Когда компьютер спит, количество тиков увеличивается. Может, батарейку снять... :)
...
Рейтинг: 0 / 0
Спящие часы
    #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
Спящие часы
    #40094216
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Если тебе нужно только активное время, то
https://docs.microsoft.com/en-us/windows/win32/api/realtimeapiset/nf-realtimeapiset-queryunbiasedinterrupttime

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

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

Minimum supported client: Windows 7

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

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

Minimum supported client: Windows 7

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

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

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

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

Прям до тиков/мс, или там и секунд достаточно?
...
Рейтинг: 0 / 0
Спящие часы
    #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
Спящие часы
    #40094529
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat,

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

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

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

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

Ты то про Now написал. А она-то как раз sleep не учитывает.
...
Рейтинг: 0 / 0
Спящие часы
    #40094557
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Да? Точно?
Я не проверял.
Извините, неправильно прочитал фразу
ъъъъъ
Когда компьютер спит, количество тиков увеличивается.
на мои сообщения можно не обращать внимания
...
Рейтинг: 0 / 0
Спящие часы
    #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
Спящие часы
    #40094644
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В отдельном треде бесконечный цикл, в котором тупой слип в течении заданного интервала (например, 100 миллисекунд) и интерлок-инкремент int64 переменной. В функции чтения - интерлок-эксчандж, результат умножаю на значение интервала. Для пущей независимости от нагрузки приложения треду задан чуть более высокий приоритет.
Сойдет, т.к. задача решена.
...
Рейтинг: 0 / 0
Спящие часы
    #40094653
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

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


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