Anwendung mit DLL schließt nicht richtig
-
Bin gerade dabei eine DLL zu schreiben, die in einem Fenster eine D3D Anwendung realisiert. Dazu hab ich nun ein kleines Starterprogramm geschrieben um das Ganze testen zu können.
Mein Problem ist nun, das wenn das Programm beendet wird, das Fenster zwar geschlossen wird aber der Prozess noch im Task Manager bleibt.
Da das komplette Programm aus DLL und Starter recht umfangreich ist, versuch ich mal nur die entscheidenden Stellen zu zeigen:
Der Starter:
Die Hauptschleife
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpsParams, int iCmd) { g_App = new CApp(hInstance, iCmd); g_App->MainLoop(); g_App->ShutDown(); delete g_App; g_App = NULL; return 0; }Die Applikationsklasse:
class CApp { public: CApp(HINSTANCE hInstance, int iCmd); // Konstruktor ~CApp(void); // Destruktor // Ein Fenster erzeugen bool InitWindow( WNDCLASSEX *wndStruct, HWND *hWnd, char sName[256], int iPosX, int iPosY, int iSizeX, int iSizeY); void MainLoop(void); // Haupt-Programmschleife void ShutDown(void); // Programm herunterfahren // Inline-Methoden inline void SetStatus(bool bStatus) { m_bRunning = bStatus; } inline bool GetStatus(void) { return m_bRunning; } private: CParameters *m_pParams; // Parameter-Objekt CNoiseData *m_pNoiseData; // Messdaten-Objekt CEngine *m_pEngine; // Das Darstellungsobjekt bool m_bRunning; // Zustand des Launchers (false -> Programm beenden) int m_iCmd; // Windows-Parameterwert HINSTANCE m_hInstance; // Handle der startenden Instanz MSG m_msgEvent; // Nachrichten Objekt des Hauptfensters HWND m_hMainWnd; // das Fenster Handle des Hauptfensters WNDCLASSEX m_wndMainProps; // Struktur der Fenster-Eigenschaften (Hauptfenster) }; // ~class CApp;MainLoop:
void CApp::MainLoop(void) { CParameters *m_pParams = new CParameters; // Parameter-Objekt für die Anwendung CNoiseData *m_pNoiseData = new CNoiseData; // Messdatenobjekt für die Anwendung CEngine *m_pEngine = new CEngine(m_hInstance, m_hMainWnd, *m_pParams, *m_pNoiseData); m_pEngine->MainLoop(); // Nachrichten Schleife, übersetzt und verteilt Windows Nachrichten while (GetStatus() == true) { GetMessage(&m_msgEvent, NULL, 0, 0); TranslateMessage(&m_msgEvent); DispatchMessage(&m_msgEvent); } } // ~CApp::MainLoop();Destruktor:
void CApp::ShutDown(void) { // Anwendung beenden delete m_pParams; m_pParams = NULL; delete m_pNoiseData; m_pNoiseData = NULL; delete m_pEngine; m_pEngine = NULL; UnregisterClass("Starter", m_hInstance); } // ~CApp::ShutDown();Bei Bedarf kann ich auch noch mehr reinstellen, ich denke es ist eher ein einfaches Grundlagenproblem, wo ich nen Denkfehler hab. Vielleicht sieht ja jemand den Fehler, hat ne Idee oder kann pauschal was zum Thema "Beenden der Anwendung" sagen.
-
Vermutlich läuft noch ein Thread oder Du "hängst" irgendwo. Debugge es doch einfach!