Expandable
2008-12-30, 15:00:47
Hallo allerseits,
ich hätte da mal eine Frage: Ich würde gerne den Zustand einer Anwendung mit einer anderen Anwendung betrachten (also eine Art "Debugger"). Da ich über die eigentliche Anwendung nichts weiß (ich weiß nur, dass sie Horde3D als Grafikengine benutzt, aber sonst nichts, insbesondere nicht, wieviele andere Threads noch laufen und was machen), müsste ich beim Debuggen die komplette Anwendung anhalten. Das lässt sich wohl mit der SuspendThread-Funktion der Win32-API bewerkstelligen (s. http://msdn.microsoft.com/en-us/library/ms686345(VS.85).aspx), die wohl genau für solche Zwecke gedacht ist. Nach dem Debuggen kann mit ResumeThread weitergemacht werden.
Die Frage ist nun: Ich rufe SuspendThread auf und debugge die Anwendung 5 Minuten lang. Dann geht's mit ResumeThread weiter. Nun "denken" wahrscheinlich die Game- und Physikengine, dass seit dem letzten Frame 5 Minuten vergangen wären (was ja eigentlich auch stimmt) und produzieren dann einen rechten Schmarrn. Wie kann ich das verhindern? SuspendThread scheint nach MSDN-Doku die Zeit nicht "anzuhalten". Bei einer Suche in MSDN und Google bin ich auch nicht wirklich schlauer geworden. Wie macht das z.B. nVidia mit nvPerfHUD?
Danke,
- Expandable
Nachtrag:
Gerade entdeckt in der nvPerfHud-Doku:
Note: PerfHUD “freezes” your application by returning the same value every time your application asks for the current time. This simulates an infinitely fast rendering loop, so the same workload is submitted for each frame.
Note: If your application has implemented a frame rate limiter, you may need to disable this functionality to use the time control, debugging and profiling features of PerfHUD. Please see the FAQ section for more information.
Genau sowas bräuchte ich also. Aber wie?
ich hätte da mal eine Frage: Ich würde gerne den Zustand einer Anwendung mit einer anderen Anwendung betrachten (also eine Art "Debugger"). Da ich über die eigentliche Anwendung nichts weiß (ich weiß nur, dass sie Horde3D als Grafikengine benutzt, aber sonst nichts, insbesondere nicht, wieviele andere Threads noch laufen und was machen), müsste ich beim Debuggen die komplette Anwendung anhalten. Das lässt sich wohl mit der SuspendThread-Funktion der Win32-API bewerkstelligen (s. http://msdn.microsoft.com/en-us/library/ms686345(VS.85).aspx), die wohl genau für solche Zwecke gedacht ist. Nach dem Debuggen kann mit ResumeThread weitergemacht werden.
Die Frage ist nun: Ich rufe SuspendThread auf und debugge die Anwendung 5 Minuten lang. Dann geht's mit ResumeThread weiter. Nun "denken" wahrscheinlich die Game- und Physikengine, dass seit dem letzten Frame 5 Minuten vergangen wären (was ja eigentlich auch stimmt) und produzieren dann einen rechten Schmarrn. Wie kann ich das verhindern? SuspendThread scheint nach MSDN-Doku die Zeit nicht "anzuhalten". Bei einer Suche in MSDN und Google bin ich auch nicht wirklich schlauer geworden. Wie macht das z.B. nVidia mit nvPerfHUD?
Danke,
- Expandable
Nachtrag:
Gerade entdeckt in der nvPerfHud-Doku:
Note: PerfHUD “freezes” your application by returning the same value every time your application asks for the current time. This simulates an infinitely fast rendering loop, so the same workload is submitted for each frame.
Note: If your application has implemented a frame rate limiter, you may need to disable this functionality to use the time control, debugging and profiling features of PerfHUD. Please see the FAQ section for more information.
Genau sowas bräuchte ich also. Aber wie?