AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Timerproblem

Ein Thema von fpr1 · begonnen am 18. Apr 2011 · letzter Beitrag vom 19. Apr 2011
Antwort Antwort
fpr1

Registriert seit: 6. Mär 2009
9 Beiträge
 
#1

Timerproblem

  Alt 18. Apr 2011, 16:42
Hi
ich habe vor längerer Zeit mal eine Sidebar programmiert. Die funktioniert auch super als ich aber jetzt die Unit adCPUUsage eingebaut habe und diese wie im readme.txt in die onTimer-Prozedur eingebunden habe aktualisiert diese den Wert nicht mehr,während die anderen Befehle bearbeitet werden.

Zur Überprüfung habe ich die Unit in einem anderen Programm separat getestet wo sie auch einwandfrei funktioniert

Delphi-Quellcode:
procedure TForm5.Timer3Timer(Sender: TObject);
 var w:integer;
 begin
     for w:=0 to GetCPUCount-1 do // Show data for each processor
     begin
        label7.caption:=Format('%5.2f %%',[GetCPUUsage(w)*100]);
        progressbar3.Position:=round(strtofloat(copy(label7.caption,0,pos('%',label7.caption)-1)));
     end;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Timerproblem

  Alt 18. Apr 2011, 16:44
Du wirst so auch nicht sehen, da die Werte ja gleich wieder überschrieben werden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Timerproblem

  Alt 18. Apr 2011, 17:29
Genau, Du wirst schon je CPU ein Anzeige-Control brauchen.

BTW: Nette Namensgebung, hoffentlich steigst wenigstens Du da später noch durch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: Timerproblem

  Alt 18. Apr 2011, 18:02
Da fehlt was WICHTIGES!

Delphi-Quellcode:
procedure TTestForm.TimerTimer(Sender: TObject);
var i: Integer;
begin
    CollectCPUData; // MUSS IMMER AUFGERUFEN WERDEN !!!
    for i:=0 to GetCPUCount-1 do
    begin
    if GetCPUCount=2 then
    BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    END;
    if GetCPUCount=3 then
    BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
    END;
    if GetCPUCount=4 then
    BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
    Label3.Caption := Format('CPU #%d - %5.2f%%',[2,GetCPUUsage(2)*100]);
    END;
    if GetCPUCount=5 then
    BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
    Label3.Caption := Format('CPU #%d - %5.2f%%',[2,GetCPUUsage(2)*100]);
    Label4.Caption := Format('CPU #%d - %5.2f%%',[3,GetCPUUsage(3)*100]);
    END;
    end;
end;
Nicht getestet - aber so könnte es funktionieren...

ÄNDERE BITTE DIE ÜBERSCHRIFT - die ist total falsch und beschreibt nicht das Problem!
Vorschlag: adCPUUsage - wie im Timer anwenden?

Geändert von hathor (18. Apr 2011 um 18:26 Uhr)
  Mit Zitat antworten Zitat
fpr1

Registriert seit: 6. Mär 2009
9 Beiträge
 
#5

AW: Timerproblem

  Alt 19. Apr 2011, 18:03
danke für die Antworten

das Problem lag an der Verwendung des Labels
muss natürlich ne mehrzeilige Komponente sein

ich dacht ich bräuchte das nicht da ich ja nur nen Singlecore hab bis mir aufgefallen ist, dass der virtuelle da auch aufgeführt wird

Geändert von fpr1 (19. Apr 2011 um 18:17 Uhr) Grund: Problem gelöst
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Timerproblem

  Alt 19. Apr 2011, 18:13
Wie mkinzler schon richtig schrieb:
Du wirst so auch nicht sehen, da die Werte ja gleich wieder überschrieben werden
Soll heißen: der Wert für die erste CPU wird zugewiesen, dann der zweite (der den ersten ersetzt) usf.
Da beginnt die Routine bereits, nicht zu funktionieren.

Ich schlage vor, pro CPU ein TLabel dynamisch zu erzeugen (wenn es TLabels sein müssen - meine Wahl wäre ein TreeView und pro CPU ein Knoten, da kann man schön alle Zusatzinfos unter die CPUs hängen).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#7

AW: Timerproblem

  Alt 19. Apr 2011, 18:39
@Hator:
Nette Schleife ... i wird nie benutzt, also ist diese doch her "nutzlos" und sorgt nur dafür, daß der Code unnötiger Weise mehrfach ausgeführt wird.

Delphi-Quellcode:
procedure TTestForm.TimerTimer(Sender: TObject);
var i: Integer;
begin
  CollectCPUData; // MUSS IMMER AUFGERUFEN WERDEN !!!
  Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
  if GetCPUCount >= 2 then
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
  if GetCPUCount >= 3 then
    Label3.Caption := Format('CPU #%d - %5.2f%%',[2,GetCPUUsage(2)*100]);
  if GetCPUCount >= 4 then
    Label4.Caption := Format('CPU #%d - %5.2f%%',[3,GetCPUUsage(3)*100]);
  // wobei man GetCPUCount vielleicht nur einmal aufrufen sollte/könnte
end;
Oder doch die For-Schleife und dann das i für die Auswahl des Labels und den Index in GetCPUUsage nutzen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

AW: Timerproblem

  Alt 19. Apr 2011, 19:32
Stimmt - ich hatte die Werte erst in ein Memo geschrieben und dann in Labels geändert...
Hat aber lange gedauert, bis es jemand auffiel!

Dann besser so:

Delphi-Quellcode:
procedure TTestForm.TimerTimer(Sender: TObject);
begin
    CollectCPUData; // MUSS IMMER AUFGERUFEN WERDEN !!!
case GetCPUCount of
2: Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
3: BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
    END;
4: BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
    Label3.Caption := Format('CPU #%d - %5.2f%%',[2,GetCPUUsage(2)*100]);
    END;
5: BEGIN
    Label1.Caption := Format('CPU #%d - %5.2f%%',[0,GetCPUUsage(0)*100]);
    Label2.Caption := Format('CPU #%d - %5.2f%%',[1,GetCPUUsage(1)*100]);
    Label3.Caption := Format('CPU #%d - %5.2f%%',[2,GetCPUUsage(2)*100]);
    Label4.Caption := Format('CPU #%d - %5.2f%%',[3,GetCPUUsage(3)*100]);
    END;
end;

Geändert von hathor (19. Apr 2011 um 19:52 Uhr)
  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 14:34 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