А возможно что там на входе 64-битный счетчик типа аксаптовского \Classes\WinAPI\getTickCount64
(System.DateTime::get_Now())
который считает некие тики. Если это тики процессора, то переполняться может достаточно часто (кстати, если не ошибаюсь, то размер "тик"-а для System.DateTime зависит от версии .net - отсюда и зависимость частоты возникновения глюков от версии винды. Выше версия винды - более мелкий тик - чаще переполняется счетчик).
И возможно что значение этого счетчика трактуется в коде как беззнаковое целое, а используется знаковое целое и при переходе через максимальное целое нормально не обрабатывается при этом.
Получается что если TickStart был положительным целым, а TickFinish перемахнул в область отрицательных, то разница их по модулю всегда будет больше или равная чем 2^63 А само число будет всегда меньше или равно чем -2^63
Но больше не влезает в размерность числа, вот мы и получаем всегда -2^63
Если эти предположения верны, то можно попробовать пофиксить приложение, чтобы корректно обрабатывало такие случаи (где бы еще взять исходники. Хотя при определенном желании можно дизассемблировать и пересобрать).
Ну или заставить все это работать с меньше точностью (задействовать более старую версию дотнет или запустить в режиме совместимости со старой версией винды)
Последний раз редактировалось Logger; 06.04.2023 в 23:24.
|