AGB  ·  Datenschutz  ·  Impressum  







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

OnIdle - Ruckler

Ein Thema von MasterDG · begonnen am 13. Dez 2005 · letzter Beitrag vom 14. Dez 2005
Antwort Antwort
MasterDG

Registriert seit: 29. Sep 2004
54 Beiträge
 
Delphi 2005 Personal
 
#1

OnIdle - Ruckler

  Alt 13. Dez 2005, 18:59
Hallo!

Also ich möchte für ein Programm immer wieder neue Bilder von einer Kamera holen und die dann verändern.

Das holen und verändern ist kein Problem.

Allerdings sollen ja so viele Bilder wie möglich in der Sekunde geholt und verarbeitet werden um ein flüßiges Bild zu bekommen.

Zum Holen der Bilder benutzte ich DSPack und zum Bearbeiten und Anzeigen ein TImage32 aus Graphics32.

Ich benutze OnIdle um eine Berechnung zu starten wenn das Programm nicht beschäftigt ist. Allerdings habe ich hier Probleme: Es kommt zu sehr starkem Ruckeln. Ich weiß nicht genau warum...

Es müsste doch erst wieder gestartet werden wenn alles erledigt ist, oder? Daher sollten solche Ruckler eigendlich nicht auftreten - denke ich oder liege ich da falsch?

Könnte es evt. an der Prozessorauslastung liegen, die konstant bei 100% liegt?

Hab mit OnIdle leider keine Erfahrung und bin dementsprechend ratlos.

Gruß
MasterDG
Dominik
Grüße Dominik
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#2

Re: OnIdle - Ruckler

  Alt 13. Dez 2005, 20:48
http://www.blubplayer.de/tutorials.html
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
MasterDG

Registriert seit: 29. Sep 2004
54 Beiträge
 
Delphi 2005 Personal
 
#3

Re: OnIdle - Ruckler

  Alt 14. Dez 2005, 13:54
Hallo!

Danke für den Link. Doch dieser hat mein Problem leider nicht gelöst...

Ich weiß dass es ganz normal ist das bei OnIdle die Prozessorauslastung auf 100% geht, das ist auch nicht das Problem. Mein Problem ist das Ruckeln das entsteht und ich nicht genau weiß woher das kommt. In dem Beispiel Sprites_Ex in der Graphics32 haben die auch OnIdle genommen um die Layer zu bewegen, doch dort tauchen keine Ruckler auf!

Habe ich irgendwas nicht beachtet?

Durch den Link bin ich auf die Idee gekommen das in nem Thread laufen zu lassen. Bisher habe ich noch nicht eine Anwendung mit Thread programmiert und müsste mir also vorher durch Tutorials das Wissen aneignen, daher wollte ich vorher fragen ob es sich überhaupt lohnt.

Also was meint ihr soll ich mit OnIdle weiter machen oder einen Thread benutzen?

Gruß
MasterDG
Dominik
Grüße Dominik
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: OnIdle - Ruckler

  Alt 14. Dez 2005, 16:53
Zitat von MasterDG:
Also was meint ihr soll ich mit OnIdle weiter machen oder einen Thread benutzen?
Weder noch. Das Problem bei OnIdle ist, dass das Ereignis "Idle" nur eintritt, wenn kein anderer Prozess CPU-Zeit fordert. Für dich in deinem eigenen Prozess besteht also immer die Gefahr dass ein anderer meint plötzlich etwas tun zu müssen, wodurch Ruckler dieser Art sogar wahrscheinlich sind.
Das selbe Problem hat auch ein Thread, es sei denn seine Priotität ist TimeCritical, und die deines Prozesses ebenso. Wovon aber extrem abzuraten ist, da dann der PC zu fast 100% mit deinem Thread beschäftigt ist, so dass höchstens noch ein paar elementare Prozesse des OS ausgeführt werden, aber der große Rest still liegt. Das bedingt auch, dass du den PC also so lange überhaupt nicht bedienen kannst, bis dein Thread zu Ende ist. Jede niedrigere Priorität kann prinzipiell durch Prozesse/Threads gleicher/höherer Priorität ebenfalls lahm gelegt werden, so dass du wieder Ruckler hättest. Du kannst dich also nicht auf eine stabile Framerate verlassen.

Die in dem o.g. Link genannten Verfahren sind imho die einzig sinnvollen, da sie dir einen Timer erzeugen der (fast) auf jeden Fall in einem ziemlich genauen Rythmus deinem Prozess die Möglichkeit gibt etwas zu tun. Zwar kann auch hier ein anderer Prozess/Thread mit sehr hoher Prioriät dazwischen funken, aber eben genau deswegen sollte kein Programm davon gebrauch machen . (Und die allerwenigsten tun dies, bzw. kenne ich keines.)
Dies ist der einzige Weg eine stabile Framerate, zumindest ziemlich gut, sicher zu stellen.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
MasterDG

Registriert seit: 29. Sep 2004
54 Beiträge
 
Delphi 2005 Personal
 
#5

Re: OnIdle - Ruckler

  Alt 14. Dez 2005, 17:59
Hallo dizzy!

Danke für deine Antwort.

Ich hatte schonmal mit einem Timer gearbeitet(der Standart Delphi Timer). Leider habe ich da so ein paar leichte Ruckler wo ich nicht genau weiß woher die kommen.

Deswegen habe ich gedacht ich benutze OnIdle wie in dem Sprites_ex Beispiel. Ich möchte den Code erst wieder aufrufen wenn das alte Bild komplett berechnet wurde. Nun gut also es geht nicht mit OnIdle, aber wie kann ich verhindern dass der Timer wieder aufgerufen wird ohne dass das alte Bild fertig berechnet wurde?

Ich habe mit QueryPerformanceCount mal die Dauer meines Vorgangs gemessen und der liegt konstant bei unter 10.000. Allerdings "springt" der Wert manchmal sehr hoch. Dieses "Springen" halte ich für die Ursache der Ruckler bei meinem Timer.

Aber ich habe momentan keine Ahnung warum die Dauer so hoch springt.

Wie kann ich dieses Springen verhindern?

Gruß
MasterDG
Dominik
Grüße Dominik
  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 20:28 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