![]() |
100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)
Hallo,
ich bin auf dem Gebiet Indy mehr oder weniger komplett neu. Habe mir bisher eine Anwendung zusammengeschrieben, die eigentlich auch wunderbar funktioniert. Das Problem tritt auf wenn der Server läuft und sich der erste Client verbindet. Dann springt die CPU-Last auf 100% (bei meinem Dual-Code halt auf 50%) - wieso?!? Ich poste mal den folgenden Code, den ich in einer minimalen (!!!) Test-Anwendung benutze:
Delphi-Quellcode:
Kann mir das irgendwer weiterhelfen?! Oder ist das normal, dass ich da 100% CPU-Auslastung habe? Ich hoffe doch nicht!
// Komponenten auf Server-Form: TIdTCPServer, Button1
// Code für Button1 procedure TForm1.Button1Click(Sender: TObject); var s : TIdSocketHandle; begin if not Server.Active then begin Server.DefaultPort := 50000; s := Server.Bindings.Add; s.IP := '127.0.0.1'; s.Port := 50000; Server.Active := True; end else begin Server.Bindings.Clear; Server.Active := False; end; end; // -------------------------------------------------------- // Komponenten auf Client-Form: TIdTCPClient, Button1 // Code für Button1 procedure TForm1.Button1Click(Sender: TObject); begin Client.Connect('127.0.0.1', 50000); end; PS: Selbst bei der Chat-Demo (von den Indys) ist das so... :pale: PPS: Nutze die Standard-Indys von Delphi 2005, d.h. Indy 10. mfg Armin |
Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)
Hi,
ich könnte jetzt eine Vermutung anstellen. Machst du Serverseitig etwas mit der Verbinung? Könnte mir vorstellen dass ein etwaiger Eventhandler (der halt nicht beschrieben ist) wieder undwieder aufgerufen wird. |
Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)
Morgääähhhhnnn...
Ich hatte das Problem mit der Auslastung damals bei nem FTP-Client... Hab lange nix mehr mit den Indy's gemacht, aber bei der 9. gab es die Komponente IdAntifreez. Die hatte geholfen. ;-) |
Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)
Wie schon beschrieben, ich habe das Minimalprogramm nur mit dem aufgeführten Code ausgeführt. Mit den Verbindungen etc. mache ich gar nix weiter. Muss ich damit irgendetwas machen?!
@Duke_2004: Die Komponente hatte ich auf meinem normalen Programm auch drauf (weil ich das vom dem Beispiel von den Indys abgekupfert hab), aber das ganze brachte leider auch keine Änderung - weiß nicht mal genau, zu was diese Komponente eigentlich da ist. Hat keiner für mich eine sinnvolle Lösung?! PS: Ich habe nun einen ![]() // --- [EDIT] -------------------------------------------------------- Ich glaube ich habe die Lösung meines Problems. Und zwar habe jetzt eine weitere Stunde gegoogelt und bin immer wieder auf das folgende gestoßen: Der Server macht keine Problem, sonst der Client fragt einfach zu oft was vom Server ab (was genau weiß ich leider nicht :oops: ) ich habe mal einen kleinen Programmauszug von ![]()
Delphi-Quellcode:
// --- [/EDIT] --------------------------------------------------------
procedure TStatusThread.Execute;
begin while not Terminated do begin try Sleep(250); //This thread doesn't need to be active all the time. Also this line keeps the CPU out of 100% FClientConnected := Form_Client_Main.ChatClientSocket.Connected; FClientThreadTerminated := ClientThread.Terminated; FClientThreadSuspended := ClientThread.Suspended; Synchronize(UpdateClientThreadStatus); except Terminate; end; end; end; |
Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)
Die Lösung meines Problems bestand in einer Zeile Quellcode, die ich dem Server hinzufügen musste. Und zwar handelt es sich um die folgende beim OnExecute-Ereignis der TIdTCPServer-Komponente:
Delphi-Quellcode:
SleepEx(1, True);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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