![]() |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Zitat:
Bei den meisten Spielen ist die CPU immer auf annähernd 100%. Wenn meine CPU niemals zu 100% ausgelastet wäre, dann war sie ein Fehlkauf und ich hätte auch eine leistungsschwächere nehmen können ^^ |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Zitat:
|
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Zitat:
Delphi-Quellcode:
.
Sleep(15)
|
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Sleep(15) funktioniert leider in zweilei Hinsichten nicht, wie ich oben schon geschrieben haben.
Wenn die Prozedur auf einem langsameren PC ausgeführt wird, benötigt sie vielleicht 10 ms (irgendeine ausgedachte Zahl) Und wenn ich danach noch 15 ms warte, dann wird sie ja erst nach 25 ms wieder ausgeführt, was nicht beabsichtig ist. Selbst auf dem langsameren PC könnte es alle 15ms ausgeführt werden. Da es aber falsch programmiert ist, geht es nicht. Desweiteren funktionier Sleep nicht so schnell. Sleep(1) zB wartet um einiges länger als 1 ms! Ich weiß nicht genau, wie nun der genaue Wert von Sleep ist, aber wenn ich bei mir Sleep(1) einfüge, ist es bedeutend langsamer als ohne. |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
um einen bestimmten Interval einhalten zu können, eignet sich
![]() |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Moin Thorus,
bei Sleep steht u.a.: Zitat:
![]() ![]() |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Zitat:
![]()
Code:
Dort steht, dass der Timer irgendwie gar nicht gut dafür geeignet ist. Selber ausprobiert habe ich es aber nicht.
hClose := CreateEvent( ??? ); // Event damit der Thread sauber beendet werden kann
hTimer := CreateWaitableTimer(nil, false, nil); SetWaitableTimer(hTimer, ???); CreateEvent hat sich dann damit auch gleich erledigt wie es scheint. Wenn man wüsste, wie zB der MediaPlayer das macht. Aber ist ja nix Open Source *g* |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
![]() IMHO die beste Lösung wenn es wirklich exakt sein muss (--> bei einem Spiel). |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Zitat:
bei dem waitable Timer kannst Du in einem separaten Thread per WaitForSingleObject auf die Fälligkeit warten. Ist auf jeden Fall feiner als ein Sleep(), zudem wird das Problem von den unterschiedlichen Abarbeitungszeiten auf verschieden schnellen Rechnern gelöst. Gleichzeitig wird jedoch nicht mehr 100% CPU-load generiert... |
Re: Threads: optimale Nutzen/Prozessorleistung-Optimierung
Was mir auffällt...
Thorus vergisst, dass es noch einen Scheduler gibt. ;) Wenn du sleep(15) ausführst, wird die dir zugewiese Zeitscheibe sofort abgebrochen und der nächste Thread/Prozess bekommt eine. Der Scheduler wird dir auch mindestens die 15ms Ruhe gönnen, die du angefordert hast. Da die ganze Verwaltung aber auch etwas Zeit kostet kannst du dir sicher sein, dass du länger wartest. ;) Es ist auch möglich, dass zwischen deiner Abgabe der CPU Zeit und einer erneuten Zuweisung mehrere andere threads ranwollen -> Du wartest also noch länger. :mrgreen: In Luckies Thread Tutorial dürfte das erklärt werden. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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