diff --git a/MainForm.pas b/MainForm.pas index 2ee321b..6cdd417 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -3409,6 +3409,7 @@ procedure TMainForm.SpectrumTimerTick(Sender: TObject); var NowTick: QWord; ElapsedTick: QWord; + LastPktTick: QWord; I: Integer; begin // «×» шапки пана: закрытие отложено сюда (нельзя free панель из её кнопки). @@ -3438,8 +3439,12 @@ begin begin NowTick := GetTickCount64; ElapsedTick := NowTick - FController.FRXStartTime; + // Сетевой поток может обновить FRXLastPktTime на 1 ms ПОСЛЕ NowTick. + // QWord-вычитание в таком случае underflow'ится в огромное значение и + // давало ложный "Connection lost" при совершенно живом DDC-потоке. + LastPktTick := FController.FRXLastPktTime; // Ждём первый пакет 5 секунд после старта - if (FController.FRXLastPktTime = 0) and (ElapsedTick > 5000) then + if (LastPktTick = 0) and (ElapsedTick > 5000) then begin BtnStartStop.Caption := 'START'; StyleButton(BtnStartStop, False); @@ -3451,7 +3456,8 @@ begin Exit; end; // После первого пакета — следим чтобы поток не прерывался более 3 сек - if (FController.FRXLastPktTime > 0) and ((NowTick - FController.FRXLastPktTime) > 3000) then + if (LastPktTick > 0) and (NowTick >= LastPktTick) and + ((NowTick - LastPktTick) > 3000) then begin BtnStartStop.Caption := 'START'; StyleButton(BtnStartStop, False);