AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi QueryPerformanceCounter - Probleme, Zeitversatz
Thema durchsuchen
Ansicht
Themen-Optionen

QueryPerformanceCounter - Probleme, Zeitversatz

Ein Thema von TERWI · begonnen am 17. Jul 2011 · letzter Beitrag vom 18. Jul 2011
Antwort Antwort
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#1

QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 17. Jul 2011, 18:29
Hab heute mal wieder mein altes Proggie zum lesen von IF-Fernbedienungen rausgekramt, weil es da wieder was zu tun gibt.
Ist so was ähnliches wie WinLIRC - nur finde ich, dass es mir besser gelungen ist ...

Vor gut 2 Jahren lief das noch einwadnfrei - u.a. Als FB-Empfänger auf meinem alten HTPC.
Heute nur Stress, liefert überwiegend wirres Zeugs bei den Signal-Timings - sogar negative Werte !
Noch verrückter ist, dass es Sprünge/Versätze von gut 4-7 mS (in meinem Fall eine 'Ewigkeit') gibt.

Lange Rede, kurzer Sinn - ich bin dank DP [eeeendlich] drauf gekommen !
Irgendwo hatte ich gelesen, das QueryPerformanceCounter Probleme macht mit MultiCore-CPU.
Ein kurzer Klick im Taskmanager und schon ist Ruhe im Karton mit nur einer CPU !

Man kann das recht schön beobachten, wie mal für ein paar Signale CPU-1 verwendet wird und dann wieder CPU-2.
Besagt Unterschied von ca. 4-7 mS muss wohl Zeitdifferenz zwischen den beiden CPU's liegen.
Verstehen zue ich das nicht wirklich, weil der Apparat hier eigentlich die ganze Zeit schläft und AUslastung gegen 0 geht.

Frage(n):
Wie kann das ? Ich hatte damals beim proggen auch schon die gleiche Maschine und da fiel das nicht auf.
Delphi 7 (ja ich weiß - Steinzeit. Für mich reichts alle male...) ist auch noch das gleiche.

Gibt's da irgendeinen Patch, ne andere Lösung ?
Falls nicht, wie kann ich dem Proggie sagen, das es nur 1 CPU nutzen soll ?

Wäre dankbar für einige Tipps.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 17. Jul 2011, 18:36
Wie du deinem Programm sagen kannst, dass es nur 1 CPU verwenden soll? - Genauso wie TaskManager/ProzessExplorer das auch machen: MSDN-Library durchsuchenSetProcessAffinityMask.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 17. Jul 2011, 18:56
Mit dem richtigen Suchbegriff bin ich u. a. auch Hier drüber gestolpert.
Sozusagen das gleiche Prob.
.... und Hier noch eins zum gleichen Thema
Irgendwie scheine ich im Moment aber zu dumm zum finden eines Codeschnipsel zu sein, mit dem ich das bewerkstelligen kann ...

Geändert von TERWI (17. Jul 2011 um 19:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 17. Jul 2011, 19:58
Nun ja, du brauchst ja nicht fiel zu wissen:
a) Dein Prozess-Handle und
b) den/die Kern(e), auf denen dein Programm laufen soll. Wenn es nur auf einem laufen soll, empfiehlt sich, den ersten zu benutzen, da der eh immer da ist.

Heißt also:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetProcessAffinity(GetProcessHandle(), 1);
end;
Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 17. Jul 2011, 20:53
Na ja, ganz so einfach geht es auch nicht, aber ...
... hab mir Hier was passendes rausgesogen.
Nun funzt das - wie mit per Hand eingestellt - wie die Wutz !

Wenn ich mal so die 'echten' Timings div. FB-Typen (Philips RC5/6, NEC, Sony, DBox) ansehe und mit meiner Leseroutine vergleiche, habe ich eine Abweichung von +/- max. 30µS (ja: Mükro !). Schon extrem gut.

Nur scheint noch irgendwas anderes zu stören
Starte ich meine DVB-App, geht das geeiere wieder los.
Auch wenn ich beide auf verschiedene CPU's stelle.

Ich betreibe den IR-Empänger übrigens an einem 'echten' COM-Port.
Hab hier noch 2x COM-USB- Adapter, davon will aber keiner.
DSR-Leitungen scheinen die wohl nicht zu supporten ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 17. Jul 2011, 21:44
Du könntest auch statt QueryPerformanceCounter einen Multimedia-Timer verwenden. (Bei Google suchenMultimedia Timers / Bei Google suchenDelphi Multimedia Timers)
Unter diesem Begriff werden verschiedene Timer/Zähler geführt, mit höheren Auflösungen arbeiten (z.B. für die Spiele, Musik oder Videos)


Ganz kraß sah man sowas beim "Time Stamp Counter" Bei Google suchenRDTSC, welcher direkt mit dem CPU-Tack lief ... pro Kern.
Wobei inzwischen viele CPU-Hersteller diese Counter (leider) vom CPU-Takt trennen (bei dynamisch getakteten CPUs lief sowas auch noch unterschiedlich schnell, je nach CPU-Auslastung).
Ein Therapeut entspricht 1024 Gigapeut.
  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 00:27 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-2025 by Thomas Breitkreuz