Einzelnen Beitrag anzeigen

Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#5

Re: Threadproblem - sleep(1) braucht ca. 5 ms! Warum ?

  Alt 18. Jul 2008, 11:03
@Lossy eX
Vielen Dank für die Vorschläge !
Der Anzeige-Thread ist halt nicht so wichtig, wenn ich den erhöhe, ist er gleich mit den anderen, d.h. wenn man viel anzeigen will (oder etwas neues), gehen die anderen mit in die Knie. Das ist aber nicht das gewünschte, da die Daten von der Karte extrem schnell kommen (und dann vom DatenHolenThread (nach Treiberaufruf) gleich gecacht werden). Der Auswerte kann auch noch langsamer sein, der hat an einigen Stellen bereits ein paar Sleeps bekommen, aber das nützt dem Ausgabethread nix, da der DatenHol-Problem-thread nie ein sleep hat...

wie macht man das mit den Events ? Bin noch Delphi-noob


Zitat von himitsu:
If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.
Ah, da ist ja ein Ansatz...
Einen solchen timer habe ich schon gemacht/kopiert (um die genaue Threadlaufzeit zu ermitteln...), hab nicht dran gedacht, dass sleep den selben langsamen Timer nimmt wie now & Co.

Aber... habe ich dann viel gekonnt, wenn ich so was wie
Delphi-Quellcode:
jetzt:=now_genau;
while now_genau < (jetzt+1) do
     sysutils.sleep(0);
     //bzw.: Application.ProcessMessages;
nehme, ich mein, dann hat ja der Thread permanent zu tun mit Zeit berechnen...

Oder nützt es was, dass als niederprioren Thread zu machen, der einen interrupt wirft ? Kann man dass überhaupt in XP/Vista machen? Wenn ja, gibt's ein Tutorial für Anfänger dazu ?


[edit] oder vielleicht so:
Delphi-Quellcode:
while now_genau < (jetzt+1) do
begin
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
     sysutils.sleep(0);
end;
Sorry, kenn den Befehlt für spoiler nicht !
[/edit]
  Mit Zitat antworten Zitat