AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Threadproblem bei Indys
Thema durchsuchen
Ansicht
Themen-Optionen

Threadproblem bei Indys

Ein Thema von Angel4585 · begonnen am 23. Jan 2009 · letzter Beitrag vom 24. Jan 2009
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Threadproblem bei Indys

  Alt 23. Jan 2009, 11:00
Hallo,

ich teste gerade die Client-Server Kommunikation mit TIdTCPClient und TIdTCPServer.

Sobald sich ein Client zum Server verbindet geht die CPU Auslastung hoch auf 90% bzw auf 49% bei nem Dualcore.
In dem Debugfenster für die Threads sehe ich dass der Thread der die CPU dermaßen auslastet "Scheduler User" heisst, der ist nicht von mir, was ist das für einer und wie mache ich dass er aufhört die CPU so auszulasten?

Den Thread habe ich über die ThreadID ermittelt welche ich in nem ProcessExplorer sehen kann.

Jemand ne Idee wie ich das hinbekomm? Ist blöd ne Serveranwendung zu haben die die CPU auffrisst
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Threadproblem bei Indys

  Alt 23. Jan 2009, 11:06
Schon mal "Scheduler User" in Google eingegeben?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Threadproblem bei Indys

  Alt 23. Jan 2009, 11:17
Jop und da bekomme ich jede Menge Schrott.

Wenn ich einen zweiten Client dranhänge kann ich zumindest schonmal sehen dass dies wohl der Thread ist der für jeden Client erzeugt wird(Ich hasse dieses Prinzip, das mit den SocketChannels ist besser)
Aber ich mache ja nichts mit diesem Thread, gibts da ne Einstellung mit der ich dafür sorgen kann das die CPU Auslastung runter geht?

Edit: Hat sich glaube ich erledigt, habe das TIdAntiFreeze auf die Form gezogen un nu gehts scheinbar, ich werd aber mal noch drauf achten

Edit2: Na daran lags auch nicht, schonwieder diese Auslastung
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Threadproblem bei Indys

  Alt 23. Jan 2009, 12:49
Aaaaha! Der TIdTCPServer hat einen Scheduler. Dieser wiederum hat da einige TIdTask Objekte, welche ununterbrochen die Onexecute Methode des TIdTCPServers aufrufen.
Ich hab jetzt ein sleep in das onExecute gemacht un jetzt gehts, aber mich würde jetzt schon interessieren aus welchem Grund das OnExecute ununterbrochen ausgeführt wird, welchen Hintergrund hat das?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#5

Re: Threadproblem bei Indys

  Alt 23. Jan 2009, 19:12
vielleicht hast du noch daten im buffer, dann wird nämlich imho die ganze Zeit onexecute aufgerufen
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Threadproblem bei Indys

  Alt 24. Jan 2009, 23:55
@Angel4585:

Wenn sich ein Client zum Server verbindet werden folgende Events ausgelöst:

- ONConnect

Solange der Client verbunden ist immer wieder :

- OnExecute

und danach OnDisconnect.

Seit Indy10 sollte auch nicht mehr für jede Verbindung ein Thread verwendet werden,
dafür ist der Scheduler ja da

Du sagst Du testest die Kommunikation zwischen Client und Server ?!
Hast Du beides(TIdTcpClient u. TIdTCPServer) in der gleichen Anwendung/Form ?

Das TAntifreeze hast Du ja schon gefunden
Hast Du auch die Property "ApplicationHasPriotity" auf "true" und "OnlyWhenIdle" auf "false" gesetzt ?

Wie sieht den Dein Code-Gerüst des OnExecute vom Servers aus ?

Folgende Befehle könnten Dir auch nützlich sein :
Delphi-Quellcode:
  if AContext.Connection.IOHandler.InputBufferIsEmpty // ....
  AContext.Connection.IOHandler.CheckForDataOnSource(2500); // Intervall nach Belieben
  AContext.Connection.IOHandler.CheckForDisConnect;
Ich habe auf jeden Fall mit Indy10(Version 10.2.3) einige Dienste auf verschiedenen Server-Systemen laufen,
die teilweise über eine Million Anfragen an Tag behandeln.
Die laufen mit 0-2% CPU-Last und ohne Speicherleck.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 04:36 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