Как известно, тики в Блэкбоксе 64-битные и получаются из 32-битных KERNEL32.GetTickCount() по следующему алгоритму:
## Код:
```
PROCEDURE Time* (): LONGINT;
   VAR t: INTEGER;
BEGIN
   t := KERNEL32.GetTickCount();
   IF t < told THEN INC(shift) END;
   told := t;
   RETURN shift * 100000000L + t
END Time;
```

(Я этот алгоритм передрал к себе в C#)

Так вот. Есть подозрение, что с функцией KERNEL32.GetTickCount() могут быть грабли...

Подозрения основаны на том, что в .Net ей соответствует функция System.Environment.TickCount, а её значения могут плавать на многопроцессорной машине, в чём я сегодня убедился лично.

На 16 процессорной машине (Intel Xeon E7340, Linux SS 2.6.18, Mono 1.2), несколько раз в секунду функция System.Environment.TickCount выдаёт значение на 1 тик меньше значения которое она только что выдала в другом потоке.

У меня был код аналогичный приведёному выше (разумеется с блокировками) так вот когда время шло на 1 тик вспять, то глобальный счётчик инкрементировался на четыре миллиарда