Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schleife beschleunigen sinnvoll? (https://www.delphipraxis.net/175794-schleife-beschleunigen-sinnvoll.html)

newbe 20. Jul 2013 16:59

AW: Schleife beschleunigen sinnvoll?
 
@EWeis

Was macht den Thread.Sleep(0) ????

haste das mal probiert? Sieht komisch aus hab ich aber häufiger schon gesehn und verbrät auch etwas Zeit.

Gruß newbe

EWeiss 20. Jul 2013 17:03

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Zitat von newbe (Beitrag 1222143)
@EWeis

Was macht den Thread.Sleep(0) ????

haste das mal probiert? Sieht komisch aus hab ich aber häufiger schon gesehn und verbrät auch etwas Zeit.

Gruß newbe

Hab ich schon versucht.
Ist das gleiche als wenn ich kein Sleep verwende.

Wenn ich mein Plugin für Winamp über meinen Wrapper mit einer Delphi Anwendung über Timer laufen lasse hab ich 7% CPU
In .NET im Thread 45% (ohne Sleep) das kann es nicht sein.
das sind halt die probleme wenn man mit while do und konsorte arbeitet.


gruss

jaenicke 20. Jul 2013 17:04

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Zitat von EWeiss (Beitrag 1222142)
Ich glaube das ich für das problem einen Multimediatimer benötige da dieser auch im nano bereich arbeitet.
Die 1 Millisekunde ist einfach noch zu viel.

ZwDelayExecution geht wohl bis runter auf 100 Nanosekunden oder so.

Zitat:

Zitat von EWeiss (Beitrag 1222142)
Beim Thread ohne Pause ist es zu schnell so das andere prozesse dadurch behindert werden.

Wie hast du das denn getestet, dass da etwas behindert? Hast du mehrere Threads mit normaler Priorität und einer Endlosschleife laufen lassen?
Bisher hast du nur geschrieben, dass die CPU Auslastung hochgeht, was aber ja erst einmal nichts damit zu tun hat andere Prozesse zu behindern.

Zitat:

Zitat von newbe (Beitrag 1222143)
Was macht den Thread.Sleep(0) ????

Das ruft das normale Sleep von Windows auf, siehe Quelltext...

Valle 20. Jul 2013 17:06

AW: Schleife beschleunigen sinnvoll?
 
Also ich würde auch sagen, dass NamenLozer und Furtbichler schon Recht damit haben könnten, dass das Problem tatsächlich eher anders gelöst werden sollte. Vielleicht wäre es sinnvoller noch genauer (Code?) zu beschreiben was dieser Thread macht.

Ansonten probier mal 0 als Paramter. Sleep(0) führt lediglich einen Kontextwechsel durch. Aber ich denke nicht dass es etwas ändern wird.
Roter Kasten: Okay, hast du wohl schon.

Sleep(0) bewirkt eigentlich aber nicht das gleiche wie gar kein Sleep. Üblicherweise verursacht es einen Kontextwechsel des Prozess-Schedulers.

Liebe Grüße,
Valentin

EWeiss 20. Jul 2013 17:09

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Wie hast du das denn getestet, dass da etwas behindert? Hast du mehrere Threads mit normaler Priorität und einer Endlosschleife laufen lassen?
Bisher hast du nur geschrieben, dass die CPU Auslastung hochgeht, was aber ja erst einmal nichts damit zu tun hat andere Prozesse zu behindern.
Das merke ich daran das die hauptanwendung den Focus verliert.
Wenn ich Mediaportal im fenstermodus starte und anschließend mit der maus auf das Caption der Anwendung klicke
und diese Festhalte dann läuft die Vis in Realzeit und die CPU-Last geht runter.

gruss

Medium 20. Jul 2013 23:38

AW: Schleife beschleunigen sinnvoll?
 
Ich kenne auch im Wesentlichen nur Sleep(1) um Threads etwas CPU-freundlicher zu gestalten, wenn man sonst keine Events hat, auf die man warten könnte. Hast du wirklich keine Möglichkeit den VSync abzuwarten? Das wäre gerade für einen Render-Thread einfach die Lösung. Schneller zeichnen als der Monitor das Bild malt bringt einfach nichts, ausser Tearing-Effekte, die eigentlich keiner so wirklich mag.

EWeiss 20. Jul 2013 23:50

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Ich kenne auch im Wesentlichen nur Sleep(1) um Threads etwas CPU-freundlicher zu gestalten, wenn man sonst keine Events hat
Ich komme zu keiner lösung.
Mein problem ist mit dem Sleep funktioniert es eigentlich.. Aber!
Die volle Framrate bekomme ich aber erst wenn ich das Vollbild in den Window mode schalte dann mit
der Maus auf das Caption oder Rahmen der Masterform drücke und festhalte.

Ich hab alles schon versucht mit form.Activate(); usw..
Es scheint als wenn das aufgesetzte Usercontrol in dem sich das VisualisierungsWindow des Plugins befindet
der Masterform den Focus nimmt oder aber einige MEssagen nicht durchläßt.

sorry salop gesagt ;)
das ist aber auch eine scheisse warum nimmt man für ein Overlay Window ein UC.

gruss

EWeiss 21. Jul 2013 22:31

AW: Schleife beschleunigen sinnvoll?
 
Hab das problem jetzt gelößt.
Ich leite die Messagen der Plugins nicht mehr über das Handle der Anwendung um
sondern erstelle dafür intern ein eigenes Window wo das plugin dann nur noch mit meiner DLL kommuniziert.
Dafür hab ich meinen Record erweitert mit einem Flag über das bestimmt wird ob man das möchte oder nicht.

Normalerweise funktioniert das ohne das man es setzen muss aber wie hier im Fall ist es von nöten.
Das Sleep in kombination mit dem erstellten Window funktioniert prächtig.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Seite 5 von 5   « Erste     345   

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