AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)
Thema durchsuchen
Ansicht
Themen-Optionen

100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)

Ein Thema von s.h.a.r.k · begonnen am 23. Aug 2006 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)

  Alt 23. Aug 2006, 21:54
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:
// 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;
Kann mir das irgendwer weiterhelfen?! Oder ist das normal, dass ich da 100% CPU-Auslastung habe? Ich hoffe doch nicht!

PS: Selbst bei der Chat-Demo (von den Indys) ist das so...

PPS: Nutze die Standard-Indys von Delphi 2005, d.h. Indy 10.

mfg Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#2

Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)

  Alt 23. Aug 2006, 22:38
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.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Benutzerbild von Duke_2004
Duke_2004

Registriert seit: 26. Jan 2005
61 Beiträge
 
#3

Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)

  Alt 24. Aug 2006, 06:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)

  Alt 24. Aug 2006, 07:00
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 zweiten Thread zu meinem Problem gestartet, der dieses Problem hier vielleicht etwas vereinfacht!


// --- [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 ) ich habe mal einen kleinen Programmauszug von dieser Website hier - Problem sollte ersichtlich sein

Delphi-Quellcode:
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;
// --- [/EDIT] --------------------------------------------------------
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: 100% CPU-Last bei TCP-Server (IdTCPServer, Indy10)

  Alt 24. Aug 2006, 08:45
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:

SleepEx(1, True);
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz