Hallo zusammen,
erstmals danke für diese Seite, das Wiki und die Tutorials. Bin jetzt schon länger am OpenGL / SDL probieren und es war bis jetzt sehr hilfreich.
Auch bei meinem ersten spielbaren Spiel sieht man langsam ein mögliches Ende
Vermehrte (zyklische) Abstürze führten dann dazu dass ich auch noch dass "Debugger benutzen und andere praktische Tipps" Tutorial durchmachte. Das Problem wies alle Symptome eines wilden Pointers auf - jedoch blieb die Suche erfolglos.
Doch das Problem war natürlich ganz woanders: Ich verwende einen Timer der die Eingaben behandelt und die Positionen berrechnet, die Grafik wird in einem Loop so schnell wie möglich gezeichnet. Aus beiden Tasks wird auf das gleiche Objekt zugegriffen, was dann manchmal zum Fehler führte.
Abhilfe: Mutex rein, alles ok.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Könntest du bitte mal genauer erklären was du machst? Bzw würde mich gerne mal interessieren wie du renderst? Das was du dort beschreibst klingt für eher nach einen Synchronisationsproblem. Aber es sollte mich wundern, wenn du zum Rendern einen extra Thread aufgemacht hast. Bzw bei DLLs gibt es einen solchen Seiteneffekt mit TTimer mitunter auch.
Eine Mutex hat nichts aber auch gar nichts mit dem Debugger zu tun. Und ich möchte auf keinen Fall, das die Mutexe wie wild aus dem Boden sprießen obwohl es eigentlich mit etwas ganz Anderem zu tun hat.
Es war ein Synchronisationsproblem. Nur zeigte es erschwerend alle Symptome eines Zeigerproblems.
Wie ich gesehen habe läuft ein SDL-Timer in einem eigenen Thread. So kommt es, dass mitten im Rendern mal ein Timer reinfunken kann.
Allerdings wird die Timer-Callback-Funktion erst wieder aufgerufen nachdem sie beendet wurde (im Gegensatz zu einem TTimer dessen Intervall-Funktion beim Debuggen oder mit ProcessMessages schon mal mehrmals aktiv sein kann).
Der Code sieht vereinfacht so aus:
Code:
TGame =class(TObject);
Game: TGame;
function glInputTimer( interval : UInt32; param :Pointer): UInt32;
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja okay. Dann hast du aber wiederrum 2 Threads. Und dafür gibt es bereits ein Tutorial. Denke mal auch nicht, dass es jetzt so ein üblicher Fall sein dürfte. Oder?
Aber okay. Im Zusammenhang mit SDL Timern ist es sicherlich erwähnenswert, dass dort dafür ein Thread aufgemacht wird. Viele (mich eingeschlossen) dürften davon ausgehen, dass ein Timer sich wie ein normaler Windowstimer verhält. Denke der beste Ort für diese Info wäre der SDL_AddTimer Artikel.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie bist du eigentlich auf den Code gekommen? Ich habe, nach einer kleinen Google suche, nämlich festegestellt, dass bei DGL mindestens noch eine Person mit dem SDL_AddTimer arbeitet. Falls dein Code auf DGL Code basiert wäre ein Hinweis auf die Quelle für uns gut. Dann könnten wir dort das Problem beheben. Anscheinend befindet sich zu diesem Thema auch etwas Code im DGLSDK. Dort sollte man mal prüfen ob ein Mutex ergänzt werden muss.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 0 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.