![]() |
AW: Schleife beschleunigen sinnvoll?
Zitat:
Nicht das ich dir nicht glauben würde.. aber es irritiert etwas wenn man mehrere meinungen von einem Thema erhält und jeder sagt was anderes. Na ja letztendlich funktioniert es so. Was die dann daraus machen lass ich mal dahin gestellt. Auf jedenfall konnte da was nicht stimmen das ein Thread einen Kern zu 100% auslastet. Immer wieder eine Freude anderen Quelltext zu debuggen nur um zu beweisen das es nicht an der eigenen Arbeit(Anwendung) liegt. Maulen können die alle ;) gruss |
AW: Schleife beschleunigen sinnvoll?
Zitat:
Delphi-Quellcode:
und schau auf die CPU-Last.
repeat until true = false;
Delphi-Quellcode:
dürfte den gleichen Effekt haben. Zumindest aus meiner Erfahrung macht jede Schleife ohne ein ProcessMessages, Sleep oder dergleichen keine Pause bei 100% CPU-Last. Ist die CPU-Last in so einer Schleife kleiner, dann ist da eventuell irgendwo eine andere Routine im Aufruf, die doch mal ein Päuschen einlegt (warten auf die Festplatte, laden von Daten aus 'nem Stream von 'nem Server irgendwo im weiten Netz... Dem, der dies da in dem anderen Forum schrieb
while not Terminated
Zitat:
|
AW: Schleife beschleunigen sinnvoll?
Zitat:
Ich wußte halt nur nicht das Thread.Sleep lediglich eine Pause einlegt. Mann kann halt nicht jede Eigenart jeder Sprache kennen ;) gruss |
AW: Schleife beschleunigen sinnvoll?
Sleep im Hauptthread führt dazu, dass die GUI nicht mehr reagiert und sollte daher dort vermieden werden.
In separaten Threads jedoch möchte man ja genau, dass der Thread auch mal schläft. Und deshalb ist es dort auch sinnvoll. |
AW: Schleife beschleunigen sinnvoll?
Zitat:
Zitat:
|
AW: Schleife beschleunigen sinnvoll?
Zitat:
|
AW: Schleife beschleunigen sinnvoll?
Zitat:
Obwohl der zu wartende Thread im grunde mit DirectX nichts am Hut hat. gruss |
AW: Schleife beschleunigen sinnvoll?
Zitat:
Sleep nutzt intern schon das genauere ZwDelayExecution (zumindest unter Windows 8), so dass man bei einer Millisekunde auch nicht viel länger wartet. Um genau zu sein sind es bei mir ca. 0,9 ms pro Aufruf mehr als angegeben, egal ob ich eine Millisekunde angebe oder 100. WaitForSingleObjectEx ist da noch etwas genauer. Da wartet man bei einer Millisekunde Timeout nur 1,6 Millisekunden und bei 100 ms sind es 100,4 ms. Dafür muss man sich erst ein Handle erzeugen, auf das man warten kann. Und wenn man nur ein wenig verzögern will, ist der Unterschied nicht groß. Deshalb ist für mich der Aspekt Plattformunabhängigkeit wichtiger. Gemessen habe ich so:
Delphi-Quellcode:
Genauso mit Sleep und verschiedenen Zeiten.
uses
Diagnostics; var i: Integer; Watch: TStopwatch; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); Watch := TStopwatch.StartNew; for i := 1 to 10000 do WaitForSingleObjectEx(Event, 1, True); ShowMessage(IntToStr(Watch.ElapsedMilliseconds)); CloseHandle(Event); |
AW: Schleife beschleunigen sinnvoll?
Ich meinte, dass man gezielt auf bestimmte Events warten sollte (z.B. „Neue Daten da“ oder „Frame abgeschlossen“), nicht, dass man WaitForSingleObjectEx als Ersatz für Sleep verwenden soll. WaitForSingleObjectEx war auch nur ein Beispiel; wie gesagt, bei 3D-Grafik-Schnittstellen gibt es ähnliche Prinzipien, und auch auf anderen Plattformen als Windows gibt es das, nur weiß ich nicht, wie die Funktionen dort heißen...
|
AW: Schleife beschleunigen sinnvoll?
In allen Threads, in denen ich das bisher benutzt habe, diente es nur dazu, dass nicht die CPU ausgelastet wurde. Da gab es schlicht nichts, auf das ich hätte warten können, da der Thread ja durchaus z.B. pollen sollte. Nur halt nicht so, dass die gesamte CPU Zeit benutzt wird.
Unabhängig davon kann man natürlich auch die Priorität senken um so nur freie Prozessorzeit zu konsumieren, aber das hilft nicht, wenn die Last den Takt erhöht und damit zu höherem Stromverbrauch insbesondere in Laptops führt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 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