![]() |
AW: max Länge TCPIP
Zitat:
Zitat:
Zitat:
|
AW: max Länge TCPIP
@jaenicke:
Danke, ich prüfe das mal mit dem Leerstring und dem Timeout. Sag mal, beim Server ist es aktuell so, dass wenn sich ein Client verbunden hat, die CPU Auslastung auf ca 6% von dem Programm geht. Es werden keine Daten verschickt vom Server und vom Client. Einfach nur das Verbinden. Wenn ich beim Server das Active auf False setze, geht die Auslastung sofort runter. Hat jemand eine Idee dazu? |
AW: max Länge TCPIP
Zum Server lässt sich ohne Quelltext nicht viel sagen. Du kannst nur mal zwischendurch anhalten und schauen, wo du gerade bist.
Hast du vielleicht ein OnExecute mit Schleife, in der du kein Sleep(1) drin hast (wenn keine Anfrage da war), um die Schleifendurchläufe im Leerlauf zu begrenzen? |
AW: max Länge TCPIP
Also ich habe eine Form mit TIdTCPServer und verknüpften TIdServerIOHandlerStack.
Delphi-Quellcode:
Das ist im groben alles...
procedure TMyForm.FormCreate(Sender: TObject);
begin IdTCPServer1.DefaultPort := 44001; end; procedure TMyForm.FormDestroy(Sender: TObject); begin IdTCPServer1.Active := False; end; procedure TMyForm.IdTCPServer1Connect(AContext: TIdContext); begin if Assigned(LogSL) then begin LogSL.Add('A client connected'); end; end; procedure TMyForm.IdTCPServer1Disconnect(AContext: TIdContext); begin if Assigned(LogSL) then begin LogSL.Add('A client disconnected'); end; end; procedure TMyForm.IdTCPServer1Exception(AContext: TIdContext; AException: Exception); begin if Assigned(LogSL) then begin LogSL.Add('A exception happend !'); end; end; procedure TMyForm.IdTCPServer1Execute(AContext: TIdContext); var tmpStr : String; begin if IdTCPServer1.Active then begin if not AContext.Connection.IOHandler.InputBufferIsEmpty then begin tmpStr := AContext.Connection.IOHandler.ReadLn('#~#*', 300, -1); LogSL.Add(tmpStr); Timer1.Enabled := True; end; end; end; |
AW: max Länge TCPIP
Pack mal am Ende des OnExecute ein Sleep(1) rein oder verwende
Delphi-Quellcode:
, damit die Anzahl der Aufrufe reduziert wird, dann sollte das nicht mehr passieren.
AContext.Connection.IOHandler.CheckForDataOnSource(10);
|
AW: max Länge TCPIP
Der Aufruf von
Delphi-Quellcode:
vor dem
AContext.Connection.IOHandler.CheckForDataOnSource(10);
Delphi-Quellcode:
hat geholfen bzgl der CPU Auslastung.
if not AContext.Connection.IOHandler.InputBufferIsEmpty then
Du meintest ja sicherlich davor aufrufen oder? Wie ist es beim Client? Da habe ich das mit der CPU Auslastung bisher nicht festgestellt (der Lesevorgang mit "InputBufferIsEmpty" und "ReadLn" ist dort auch in einem Thread ausgelagert). Sollte man dort auch
Delphi-Quellcode:
aufrufen?
TCPClient.IOHandler.CheckForDataOnSource(10);
Sleep(1) wird nicht gebraucht :-) |
AW: max Länge TCPIP
Sehr gut, ja, ich meinte davor aufrufen. Und Sleep(1) war nur eine Alternative, die brauchst du dann nicht, nein.
Im Client brauchst du das nicht, wenn du ReadLn verwendest. Wenn nicht, eines der beiden schon, so habe ich es ja auch in meinem Codebeispiel drin (das Sleep). |
AW: max Länge TCPIP
Ja ich verwende im Client das ReadLn. Hatte nur gefragt, da ich es ja im Server auch verwende das ReadLn.
Danke für die Unterstützung bisher |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz