| Autor |
Beitrag |
der_zaehe
      
Beiträge: 317
WinXP SP2
D6 Pers, D2005 Prof, VS2005
|
Verfasst: Mo 25.07.05 21:42
eine sache die ich mich schon öfters mal gefragt habe: wie stark lasten eigentlich mehrere timer (so einige timer), ich denk da an die 200, das system aus? ich vermut mal stark, dass das von ihrem interval abhängt.
hat hier jemand schon mal erfahrungen mit gemacht?
mfg der_zaehe
_________________ [inspirationslos]
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 25.07.05 21:48
Ich weis es zwar nicht, aber generell kann man auch mit einem Timer arbeiten! Man erstellt sich nur einige Variablen vom Typ Boolean und nennt sie z.B. Timer1Enabled, Timer2Enabled... und noch einige Cardinals als Intervalle. Das lässt sich alles in einen Timer packen und schont so im Endeffekt rechenleistung. Wenn ich auch nicht weis, wie solche Timer funktionieren. Vielleicht bauen sie jeder einen Thread auf? Das wäre ja ... schrecklich ^^
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mo 25.07.05 22:03
200 Timer...  Ich tippe einfach mal auf ein schlechtes Konzept. Kein Mensch braucht für irgendwas 200 Timer - das lässt sich unter Garantie anders lösen. Timer lasten das System aus. Ob sie einen eigenen Thread beanspruchen (@JayEff) wage ich zu bezweifeln, aber sie kosten in jedem Fall enorm Rechenleistung. Also nicht darüber nachdenken - gleich einen anderen Ansatz wählen
AXMD
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 25.07.05 22:06
Mit Threads läuft das nicht (jedenfalls nicht bei TTimer). Viele Komponenten (egal ob Timer oder Buttons) kosten immer Resourcen und können zu extremer Systemlast führer (je nach System). Ein Timer macht nichts anders, als Windows anzuweisen in x Sekunden eine Nachricht WM_TIMER zu schicken, damit darauf reagiert werden kann. Wenn du also 200 Timer benutzt, so werden sich früher oder später in einer Nachrichtenliste einige WM_TIMER ansammeln, die vor den wichtigeren Messages ausgewertet werden müssen. Also ja, es lastet aus
Gruß,
maxk
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 25.07.05 22:29
STIMMT die WM_TIMER... das hätte ich wissen müssen... Man stelle sich 50000 WM_TIMER s vor, und der User hat grade WM_QUERYENDSESSION gesendet... ^^' Aber wie ich schon gesagt hab, man kann 50000 Timer in einen Einzigen stecken.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 25.07.05 23:33
Wobei aber die meiste Last durch die VCL verursacht wird. In einer Test-Anwendung hab ich Problemlos über 200 KB\s nur im WParam einer Windows-Nachricht zwischen zwei Prozessen verschickt (4 Byte pro Nachricht). Die Sache dabei war aber, dass ich mich um die Message-Queue selber gekümmert hab.. Bei den Windows-Nachrichten seh ich daher weniger einen Engpass, eher in der VCL.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
der_zaehe 
      
Beiträge: 317
WinXP SP2
D6 Pers, D2005 Prof, VS2005
|
Verfasst: Mo 25.07.05 23:39
es geht jetzt nicht direkt darum, das ich tatsächlich ein projekt habe, in dem derart viele timer vorkommen  , es hat mich nur generell interessiert, ob das funktioniert.
ich hatte mal ein prog (der BAKTERIENSIMULATOR!!) das, wie der name schon verrät, bakterien in einer petrischale (jedoch der einfachheit halber einer viereckigen) simuliert hat. ich habe im endeffekt nur einen timer verwendet, jedoch hätte ich auch die möglichkeit gehabt, für jedes bakterium einen zu nehmen, das hätte dann 700*700 timer maximal bedeutet  . das kam mir dann doch ein wenig überladen vor.
_________________ [inspirationslos]
|
|
HeuteEinKoenig
      
Beiträge: 31
Windows 2K XP
|
Verfasst: Do 04.08.05 13:33
Na dann... die Timer haben (fast) keinen Einfluss auf die Prozessorlast. Spannend ist nur, was an den Timern dran hängt.
Timer an sich machen aber gar nix, da kannste meines Wissen nach tausende gleichzeit verwenden und nix passiert.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 04.08.05 19:34
Hm also wie wir erfahren haben, haut jeder Timer eine Message auf den Queue und das heist dann: Wenn ich WM_Close an meine Anwendung sende, dann muss ich 700*700 Messages warten... Genau so mit den Maustasten, Tastatur... => Keine Ahnung was du mit der Prozessorlast meinst, aber das Prog selber sieht sehr eingefrohren aus.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
HeuteEinKoenig
      
Beiträge: 31
Windows 2K XP
|
Verfasst: Do 11.08.05 16:28
So : ich hab nu mal ein Prog mit 7000 Timern erzeugt und gebe offen zu, es hat tatsächlich ca 5 sekunden gedauert, bis
das Prog sich nach einer WM_Close - Message geschlossen hat. Ich gebe weiterhin zu, dass 7000 Timer in der Tat die Queue ein wenig aufblähen... Ich revidiere also meine Aussage es macht NIX aus; nur einfrieren tut da nix. Warum auch ?
Ferner gebe ich aber auch zu, daß alle Timer ohne Ereignisse laufen was aber trotzdem Messages in der Queue auslöst.
Die schlauste Aussage zu dem Thema aber ist die, daß kein Mensch so viele Timer braucht und dieses ganze Thema
rein hypothetisch ist. Wenn jemand noch etwas interessantes dazu beisteuern möchte, dann fülle er die Timer mit Leben
und wir gucken mal was dann passiert; obwohl das Ergebnis wohl klar ist.
Gefragt war aber nur ob nur die Timer an sich die Anwendung einfrieren und mein Versuch sagt nein.
Zur Erläuterung meines Versuchs :
Wenn ich mehr als 7000 Timer erzeuge lösen die ersten bereits aus bevor die Fehlenden erzeugt werden können.
Hierdurch bricht die Scchleife die die Timer erzeugt ab. Etwas aufwändiger programmiert könnte man dieses Problem
natürlich umschiffen - nur wer will das ?

|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Do 11.08.05 17:06
So das war jetzt sehr ausfühlich...
Also ich glaube wir sind uns einig, dass im Alltag der Gebrauch von Timern (da die OnTimer- Events ja gefüllt werden) sehr Programmbremsend sind, oder?
_________________ Programmers never die, they just GOSUB without RETURN
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 12.08.05 12:47
...Wenn du die eine Message auf der Queue meinst, nein, wenn du aber meinst,d ass wir niemals mit mehr als 5000 Timern arbeiten sollten, JA 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 12.08.05 13:05
@JayEff: Streich mal bitte 2-3 Nullen von den 5000 ... Dann sollte das hinkommen ...
Die Windows-Queue ist zwar schnell (nach eigenen Messungen bis 200 KB\s im Param-Teil, das heißt aber nicht, dass man das machen muss.
Bei den Timern kommt wie gesagt ein gewaltiger Aufwand im Kernel dazu, da die Timer ständig ausgewertet werden müssen, welche denn schon abgelaufen sind. Das Beschleunigt das System auch nicht grad, wenn man 80% Kernel-Auslastung hat (ab ca. 90%* steht die Maus nahezu) ...
*Hab nen bescheiden programmierten SCSI-Treiber für'n Scanner, daher weiß ich das aus eigener Erfahrung ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|