beendigungsnachricht eines threads



  • Hi!
    Kann mir ein Thread eine Nachricht schicken,
    wenn er fertig ist?

    Danke
    Axel



  • Hi!
    Ja, das ist möglich:

    In der H:

    .
    .
    afx_msg LRESULT OnThreadTerminated(WPARAM, LPARAM);
    DECLARE_MESSAGE_MAP()
    .
    

    In der CPP:

    .
    #define WM_THREAD_TERMINATED    (WM_USER + 1)
    .
    .
    BEGIN_MESSAGE_MAP(...)
    ON_MESSAGE(WM_THREAD_TERMINATED, OnThreadTerminated)
    END_MESSAGE_MAP()
    .
    .
    LRESULT CMyClass::OnThreadTerminated(WPARAM, LPARAM)
    {
        // whatever
        return S_OK;
    }
    .
    

    Beim Aufruf des Threads muß der Threadfunktion der HWND übergeben werden.

    Vor dem Beenden des Threads wird dann folgende Funktion aufgerufen:

    ::PostMessage(ppar->hWnd, WM_THREAD_TERMINATED, 0, 0);
    

    tschuess!

    kaiku



  • Prinzipiell ist es besser, Events dafür zu verwenden!
    Man betrachte folgendes Beispiel:
    Das Hauptprogramm wird beendet, während der Thread noch läuft. Hier kann es sein, dass der Thread plötzlich auf Resourcen zugreifen will, die nicht mehr vorhanden sind.
    Einen Event setzen und in der Beendigungsroutine des Hauptprogramms WaitForSingleObject rein, damit passt es dann wieder 😉


Log in to reply