После длительной работы QUIK: os.clock() =-0.001

Страницы: 1
RSS
После длительной работы QUIK: os.clock() =-0.001
 
QUIK 11.0.3.1 работал без перезапуска четыре недели.
os.clock() =-0.001
Перезапустил QUIK всё стало на свои места.
 
Ну при чем тут quik? Это родная функция lua https://www.lua.org/manual/5.4/manual.html#pdf-os.clock
Ну и использует она функцию clock() из С. А у майкрософт реазизация такая: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/clock?view=msvc-170
Цитата
If the elapsed time is unavailable or has exceeded the maximum positive time that can be recorded as a clock_t type, the function returns the value (clock_t)(-1).

Так что это в майкрософт писать надо. В линуксе по другому, там оно при переполнении возвращается к 0: https://man7.org/linux/man-pages/man3/clock.3.html#NOTES
Цитата
Note that the time can wrap around.  On a 32-bit system where CLOCKS_PER_SEC equals 1000000 this function will return the same value approximately every 72 minutes.
 
Ясно, спасибо. Тогда os.clock() лучше не использовать или добавить костыль для фикса -0.001.
Если повторится попробую второе.
 
А что вам дает 1 мс, если рассинхрон с сервером брокера до 100 мс бывает? Тут как не синхронизируй часы ПК, синхронности с брокером не получишь. Даже если предположить, что это обойдем, то простая синхронизация времени ПК все равно будет не идеальна +-10 мс после синхронизации. Тут была тема про это, там все очень плохо на ПК в аппаратной части с этой точки зрения.
 
Цитата
Михаил Понамаренко написал:
Если повторится попробую второе.
:smile: Обязательно повторится на 25-й день, вам же paluke написал почему: "Microsoft implements clock_t as a long, a signed 32-bit integer, and the CLOCKS_PER_SEC macro is defined as 1000. This macro gives a maximum clock function return value of 2147483.647 seconds, or about 24.8 days".
 
дополню ответ:
Если процесс выполняется дольше, значение, возвращаемое функций clock, всегда равно (clock_t)(-1) в соответствии со стандартами ISO C99 (7.23.2.1) и ISO C11 (7.27.2.1).
 
Вы можете использовать 64-разрядную time функцию или функцию Windows QueryPerformanceCounter для записи процесса, прошедшего много лет.
Страницы: 1
Читают тему
Наверх