Was hälst Du davon, die Brechnung in einen Thread auszulagern? Damit bist Du unabhängig von deiner FPS.
Das hatte ich schon versucht... hat bei mir aber jedesmal wo ich es versuchte nach einiger Zeit einfach so zu einem BlueScreen (unter Win2k) geführt....
Hast du nciht ein 2 Prozessorsystem? Normalerweise dachte ich Win2k wäre in der richtung inzwischen etwas gereift, aber anscheinend doch nicht - also normalerweise musst du darauf aufpassen, dass sich dein Haupthread und dein Simulationssthread nciht ins gehege kommen, besonders bei Multiprozessorsystemen, da es bei denen passieren kann, dass beide Threads auf unterschiedlichen CPUs laufen und gleichzeitig den Speicher überschreiben - an der gleichen adresse und -> Bang. Entsprechnd die Frage: Hast du ordentlich Synchronisiert mit CriticalSections(Siehe Delphi Online Hilfe - ist in Delphi prima gekapselt) und oder Interlocked Befehlen wie z.B. InterlockedDecrement, InterlockedExchange, .... Siehe WinAPI Hilfe. Das sollte auf alle Fälle funktionieren. Ach noch was - der Memeory Manager von Delphi hat so seine Probleme mit Multitasking... Einen testweisen Ersatz findet man hier: <a href='http://www.optimalcode.com/memmgr.htm' target='_blank'>http://www.optimalcode.com/memmgr.htm</a> einfach mal ausprobieren.
mein programm soll nur ein dreieck drehen, das sich immer gleichschnell dreht, egal wieviele FPS man hat. im moment habe ich um die 2500 FPS und es stockt zwischen drin mal, und genau DAS will ich wegkriegen.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Der Code scheint nach dem ersten Überfliegen keine Fehler zu enthalten.
Wenn deine "Animation" allerdings in unregelmäßigen Abständen stockt, dann kannst du da leider sehr wenig dran ändern.Das ist meist was systembedingtes, das oft am Grafikkartentreiber hängt. Unter D3D gibts gegen dieses Stocken das sog. "Tripplebuffering".Wir OpenGL'ler müssen uns allerdings noch ein wenig gedulden, da über die Implementation dieses Features erst in nächsten ARB-Meeting diskutiert wird.
Du kannst allerdings mal dein Programm hochladen, dann teste ich es.Wenns bei mir net stockt, dann liegts definitiv an deinem System.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Hm...hab das Programm grad mal laufen lassen (Athlon XP2600+, GF4Ti4400, Deto 43.00) und hab kein Ruckeln oder stocken bemerkt.Das Dreieck rotiert schön flüssig vor sich hin.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Verwendest du ein Board mit VIA-Chipsatz?Wenn ja, dann könnte es daran liegen, da diese in unregelmäßgien Abständen bei der Nutzung von QueryPerformanceCounter fehlerhafte Werte liefern, und deine Rotation so nicht mehr genau ist.
Da ich allerdings ein Board mit nem nForce2-Chipsatz habe, kann ich dieses Problem nicht nachvollziehen.Einzige Alternative wäre dann die Verwendung von GetTickCount zur Zeitmessung.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Guest hat geschrieben:
ja habe nen via chipsatz... kannste mir den code so umschreiben dass es bei mir gehen sollte? :>
Diese hinterhältige Frage ist aber ganzschön dreist...
Zum einen bringst eh nix, wenn man sich seine Programme von anderen schreiben lässt, und zum anderen lernt man erst dadurch das man etwas selber macht...schau dir also die Definition von GetTickCount aus der WindowsSDK-Hilfe an und probier den Code selbst umzuschreiben.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Guest hat geschrieben:
wieso benutzen alle queryperformancecounter wenns auch mit gettickcount geht ?
PS: gibts nen treiber patch oder so für dieses problem?
QPC wird deshalb so oft genutzt, da dessen Auflösung höher ist als die von GetTickCount.Ich gehe mal davon aus, das professionelle Anwendungen zwar QPC nutzen, aber mit einer Helferprozedur prüfen, ob die von QPC zurückgelieferten Werte auch im Rahmen des Richtigen sind.
Allerdings fällt eine fehlerhafter QPC-Wert bei einem Spiel nicht so auf, wie bei der Animation eines Dreieckes.Bei letzterem ist der Blick schliesslich auf die Animation fixiert, und jedes Stocken wird direkt wahrgenommen.
@Treiberpatch : Das Problem ist bei Microsoft zwar bekannt, und auch dokumentiert, nen Patch gibts dafür aber nicht.Allerdings kanns sein, das die VIA-Treiber das Problem lindern...ausserdem muß das Problem nicht nur an deinem Chipsatz liegen...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Um meine Aussage zu untermauern gibts hier den entsprechende Report von Micro$oft : <a href='http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B274323' target='_blank'>http://support.microsoft.com/default.aspx?...Ben-us%3B274323</a>
Dort gibts am Ende des Reports übrigens ein Codesample (in C), das die angesprochenen Zeitsprünge feststellt.Mit Hilfe dieses Codes könnte man sich dann eine Routine schreiben, die diese Problematik verringert.
Wie ich allerdings schon sagt, fällt ein kurzer Zeitsprung von QPC in einer Spielumgebung im Normalfall nicht auf.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.