Does the variable "tp" belong to the thread, or is it public variable that many threads could send same time?
What kind of type is your Result? I had this same issue. GetTickCount return DWord and my variable was Integer. Make sure that you are using Dword
procedure TComPortThread.Execute; var List: TList; ReceiveStr, SendStr: AnsiString; Helper: TOpenLCBMessageHelper; CompletedSendDatagram: TDatagramSend; T: DWord; // Time the execution of the thread loopbegin T := 0; CompletedSendDatagram := nil; Helper := TOpenLCBMessageHelper.Create; Serial := TBlockSerial.Create; // Create the Serial object in the context of the thread Serial.LinuxLock:=False; Serial.RaiseExcept:=False; Serial.Connect(Port); try if Serial.InstanceActive then begin Connected:=True; Serial.Config(BaudRate, 8, 'N', 0, False, False); // FTDI Driver uses no stop bits for non-standard baud rates. while not Terminated do begin ThreadSwitch; // Let main thread have some time T := GetTickCount; ...