Проблема на самом деле старая;TickCount варьируется, даже между несколькими процессорами на одном компьютере:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/22c68353-1dbb-4718-a8d2-0679fdc0c298/
Я предлагаю установить для вашего Sleep значение выше 8000, скажем, 9500, и поэтому придерживайтесь той же механики для tickCount, поэтомуСон всегда должен быть выше.
Другая ссылка для чтения здесь:
http://en.wikipedia.org/wiki/Latency_(engineering)#Computer_hardware_and_operating_system_latency
С конкретной ссылкой на параграф в Microsoft Windows.
Обновление:
Я не уверен, почему за это проголосовали, но позвольте мне прояснить проблему, как я вижу, здесь.
На TickCount нельзя полагатьсякак конкретный показатель времени, за исключением случаев, когда он локализован на одну единицу обработки.Первая ссылка на MSDN содержит ссылку на причину.
Во-вторых, сама Windows может иметь неточности в логике таймера.
Наконец, сам по себе ваш кристаллтаймеры на основе могут отличаться, так как известно, что атмосферные условия влияют на пьезоэлектрические колебания.
http://en.wikipedia.org/wiki/Crystal_oscillator#Temperature_effects
Таким образом, TickCount ненадежен, и получить абсолютную точность при отправке пакетов по сети сложночто-то, чего можно достичь в сетях потребительского уровня.
Мое решение - обеспечить, чтобы таймер отключения ожидал дольше, чем таймер тика, не элегантно, но достаточно «помадки» для решения проблемы.
Вы не можете гарантировать, что пакет будет доставлен в течение X секунд, но вы можете убедиться, что он не будет отправлен до истечения определенной продолжительности.