so weit funktioniert das es ja auch aber irgend wie auch wieder nicht
Delphi-Quellcode:
procedure TMyClient.Send(var Cmd: TCommandHandling; SendNow : Boolean; FreeCmd : Boolean);
var
s : string;
StartTime : double;
cs : TCriticalSection;
begin
if not fIsOnline then GoOnline('127.0.0.1',12345);
application.ProcessMessages;
cs := TCriticalSection.Create;
cs.Enter;
//Daten im Buffer ablegen
fQoS.QoS_Buffer := fQoS.QoS_Buffer + cmd.SendFrames;
//Jetzt senden oder Sammeln
if not SendNow then
if length(fQoS.QoS_Buffer) < fQoS.QoS_SendSize then exit;
if not fIsOnline then exit;//wird bei OnConnect auf true gesetzt
fPingPong.SendePing;
StartTime := now + 2.2*(2.2/86400.0);
//Ping gesendet warte auf Pong
while (not fPingPong.fPong) and (StartTime > now) do
begin
sleep(1);
application.ProcessMessages;
end;
//Ist Pong ok und zeit nicht abgelaufen, also verbunden, sende daten
if fPingPong.fPong then
begin
fPingPong.fPong := false;
//Daten senden
s := fQoS.QoS_Buffer;
fQoS.QoS_Buffer := '';
fClient.Socket.SendBuf(PChar(s)^,length(s));
end else // wenn kein pong server nicht da -> off
if fIsOnline then
GoOffline;
application.ProcessMessages;
//Freigeben
if FreeCmd then cmd.Free;
cs.Leave;
end;
so klappt es auch aber nicht immer wenn ich debugge und las mir "zeit" beim debuggen funktioniert es immer.....
Vielleicht findet ja jemand einen Fehler oder weis wie man es besser / eleganter lösen kann....