DirectX9 und Threads
-
Moinsen!
Ich sitze gerade vor einem Problem, welches ich nicht gelöst bekomme.
Beim Initialisieren der Engine lade ich mir ein X-Mesh und lasse das rausrendern. Funktioniert spitze!
Da die restlichen Meshes alle recht groß sind, möchte ich dem Nutzer eine Rückmeldung geben, daß die Anwendung nicht abgeschmiert ist, sondern die Drahtgittermodelle im Hintergrund lädt.
Ich dachte mir, das Laden der anderen X-Objekte einfach in einen neuen Thread legen und in der Renderschleife anzeigen lassen, was er gerade macht. Nur kämpfe ich nun mit Probleme wie:* daß das Fenster nicht mehr aktualisiert wird oder
* das Fenster schwarz bleibt oder
* die Anwendung irgendwelche Ausnahmen schmeistMeine Threadfunktion sieht wie folgt aus:
void LoadThread ( void* runnableInstance ) { CEngine *pEngine = static_cast<CEngine*> ( runnableInstance ); DWORD dwResult = 0; pEngine->LoadObjects ( ); pEngine->ChangeState ( MAIN ); GetExitCodeThread ( pEngine->GetThreadID ( ), &dwResult ); ExitThread ( dwResult ); }
Aufgerufen wird der Thread so:
DWORD dwThreadID; m_hThread = CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) LoadThread, this, 0, &dwThreadID ); if ( m_hThread == NULL ) return ( false );
Hat jemand schon mal so was in der Art gecoded?
Ohne Thread funktioniert die Anwendung ohne Probleme.
-
und du kannst garantieren dass deine ganze engine threadsafe ist?
-
Hmmmm! Gute Frage, das kann ich natürlich nicht und ich nehme an, sie wird es auch nicht sein.
Wie könnte ich das Problem mit dem Anzeigen des Ladevorgangs dann anders geschickt lösen? Hat jemand eine Idee?
OK, ich habe ich Idee und sie klappt auch, schön ist was anderes, aber zumindestens bekommt der Nutzer nun ein Feedback.