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

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
 
#2

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
 
#3

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.538 Beiträge
 
Delphi 12 Athens
 
#4

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
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 18. Jul 2011, 07:37
Problem scheint wohl offensichtlich zu sein, dass alle (anderen) Timer zu langsam sind.
Ich muss schon eine Auflösung von max. ( ! ) 250 µS haben, um die Timings unterschiedlicher IR-FB-Typen noch so eben auflösen zu können.
Mit Timer-Auflösungen >= 1 mS ist da leider (gar) nichts zu machen.

Wie gesagt geht das mit dem QPC ganz hervorragend - wenn man die Anwendung auf einen Kern setzt.
Aber:
Was tun, wenn das ganze in einer DLL / Plugin als Child in einem Programm läuft, was es von der Performance her 'nicht so witzig' finden würde, wenn man die CPU-Power beschränkt ?

Ein Ansatz wäre, jedes mal beim Auslesen des Counters die CPU definiert zu setzen und dann gleich wieder zurück zu setzen.
Oder halt so lange auf einer CPU 'sitzen' zu bleiben, bis das FB-Signal fertig gelesen ist....

Irgendwie kann ich mir vorstellen, dass das z.B. bei DVB-Anwendungen mit HD-Signal oder anderen Power-Intensiven Anwendung doch sicher zum stottern im Bildfluß führen wird - also sicher nicht die pralle Lösung.

2. Idee wäre, das ganze in einen Thread zu packen und diesen dann definiert einer CPU zuzuweisen - mit ggf. dann höchster gesetzter Priorität.
Könnte mir vorstellen, dass das geht - aber wie ?
Ich bin da nicht so der Held ....

Jemand vielleicht noch ne andere Idee ?

PS:
In diesem Fred ist die Erklärung sehr gut gegeben, warum.
Nur leider auch noch keine Lösung ...

PS-2:
Der in v.g. Fred beannte MS-Artikel ist jetzt hier nachzulesen.
... ich studiere ihn gerade ...

Geändert von TERWI (18. Jul 2011 um 08:58 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 18. Jul 2011, 09:12
Ich finde eine Hardwarelösung mit Microcontroller besser.

http://ww1.microchip.com/downloads/e...otes/00657.pdf

http://www.mikrocontroller.net/articles/IRMP

Wenn man alles von einer CPU (Desktop, Notebook) machen lässt, stellt man früher oder später fest, dass eine betriebssystemunabhängige Lösung besser ist.
Die IR-Auswertung (vor allem die Loops) treiben die CPU-Last nach oben.

Offtopic:
Das beste Beispiel ist ein Satelliten-Empfänger (DVB-S) mit PVR-Funktion.
Die eingebaute HDD funktioniert fehlerfrei, aber eine USB-HDD blockiert die ganze Bedieneinheit:
Das Gerät funktioniert nicht direkt auf Befehle (oder nur zufällig):
- kurz nach dem Einschalten, weil dann die USB-HDD gesucht und gelesen wird
- beim Abspielen von Aufzeichnungen von der USB-HDD

Geändert von hathor (18. Jul 2011 um 09:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 18. Jul 2011, 09:44
Einige Mainboards haben sogar schon einen IR-Empfänger an Board (oftmals fehlt nur noch die Empfängerdiode ) ... ein Blick ins Handbuch des Boards kann das klären.

Zitat:
Was tun, wenn das ganze in einer DLL / Plugin als Child in einem Programm läuft, was es von der Performance her 'nicht so witzig' finden würde, wenn man die CPU-Power beschränkt ?
Man kann nicht nur ganze Programme an Kerne binden, sondern kann das auch geziehlt für einzelne Threads machen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Jul 2011 um 09:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 18. Jul 2011, 09:47
delete
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

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

AW: QueryPerformanceCounter - Probleme, Zeitversatz

  Alt 18. Jul 2011, 11:42
@himitsu

A) Die in PC's verfügbaren IR's sind alle vom Typ IRDA und für Datenverbindungen z.B. zu einem PDA o.ä.
Für 'normale FB's mit 35-36KHz Modulation nicht zu verwenden.

B) Über die Sache mit den Threads denke ich nach - leider im Büro keine Chance

@hathor

Ob eine Hardwarelösung so viel besser ist ?
Zum einen kostet sie extra um zum anderen muss der PC auch wieder irgendwo 'zuhören', wenn der kleine Bruder spricht.
Ich lasse mir auch nur nen Event vom COM-Port auf DSR geben und lese max 80mS (via erst dann gestartetem Timer) Daten, die da kommen (können).
Da gibt es keine Dauer-Loop mit Sleeps oder sonstigen Schwachfug.


Ich hab mein FB-Tool mal wieder ausgebuddelt, weil ich genau an einem solchen HTPC wieder weiterarbeiten muss (!).
Hatte mir damals mal nen Topfield TF 7700 PVR gegönnt und dachte, mit dem passenden Image (AAC MME) ist das sicher besser als mein WinDoof-Gebastel (in einem jedoch sehr schicken Gehäuse).

Falsch gedacht ! Mit dem Pinguin komme ich nicht klar und das, was ich haben will, geht mit dem Topf (zunächst) nicht.
Also alles noch mal neu überarbeitet und diesmal richtig.

Als DVB-App verwende ich neben DVBDream übrigens meine eigene Kreation. Geht gut.
Zum OnlineTV-Zeitung lesen nehme ich den TV-Browser und zum Filme gucken wurde VLC adaptiert/implementiert.
Das alles kann ich über eine einzige (egal welche) FB aus dem Sofa steuern.

Nur wenn es da schon mit der Auswertung der FB hapert .... aber auch das bekomme ich (mit eurer Hilfe =!) sicher hin.

Geändert von TERWI (18. Jul 2011 um 11:45 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 06:46 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