PreTranslateMessage wird nicht aufgerufen



  • Hallo zusammen,

    ich habe eine Frage zu der Methode PreTranslateMessage(MSG* pMsg).
    Ich habe einen Thread (von CWinThread abgeleitet). In meiner Klasse überschreibe ich die Methode PreTranslateMessage(). Wenn ich jetzt eine MSG an den Thread sende würde ich erwarten, dass die Methode PreTranslateMessage(MSG* pMsg) aufgerufen wird. Leider ist das nicht der Fall.

    So versende ich die Nachricht:

    PostThreadMessage(serviceController->m_nThreadID, WM_EXITSERVICETHREAD, wParam, lParam);
    

    In allen Beispielen die ich gefunden habe wird PreTranslateMessage Message überschrieben und alle sind glücklich. Wo könnte ich etwas übersehen haben?

    Gruß
    Trudix



  • CWinThread::PreTranslateMessage:

    This member function is used only in user-interface threads.

    Hast du denn einen "user-interface" Thread erstellt?



  • Ja, hab ich. Der Thread läuft soweit ja auch:

    // create CServiceController
    serviceController = (CServiceController*) AfxBeginThread(RUNTIME_CLASS(CServiceController),
    		THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL);
    serviceController->m_bAutoDelete = false;
    // start service controller thread
    serviceController->ResumeThread();
    

    InitInstance() wird problemlos aufgerufen. Also gehe ich mal schwer davon aus, dass soweit alles stimmt.

    Gruß
    Trudix



  • Hast du mal versucht, statt der globalen PostThreadMessage() die entsprechende Methode deines Thread-Objekts aufzurufen?

    serviceController->PostThreadMessage(WM_...,wparam,lparam);
    

    Ansonsten - bist du die sicher, daß der Thread gerade nicht anderweitig beschäftigt ist?

    PS: Notfalls schreib ein TRACE("PreT\n"); oder ähnliches an den Anfang der PreTranslateMessage - um zu überprüfen, ob der Thread überhaupt dort durchläuft. Oder definiere dir direkt einen MessageHandler für deinen Abbruchbefehl.



  • Danke für deine Tipps:

    Hast du mal versucht, statt der globalen PostThreadMessage() die entsprechende Methode deines Thread-Objekts aufzurufen?

    Das hatte ich auch als erstes ausprobiert. Leider kein erfolg.

    serviceController->PostThreadMessage(...)
    

    Ansonsten - bist du die sicher, daß der Thread gerade nicht anderweitig beschäftigt ist?

    Ich mache noch gar nichts in dem Thread. Ich bin noch dabei das Grundgerüst auf zu bauen 😉

    PreTranslateMessage wird überhaupt nicht aufgerufen. Da muss ich kein Trace benutzen. Ich habe einen Haltepunkt ganz oben in der Methode und der wird nie Angesprungen 😞 Genau da liegt ja mein Problem ...

    Gruß
    Trudix



  • OK, ich habs gefunden!
    Zuerst einmal vielen Dank CStoll. Dein Hinweis ob irgendwo etwas blockiert hat die Lösung gebracht. Wie immer war wieder der Programmierer schuld ... 🤡
    Ich habe in der Methode Run() nicht CWinThread::Run() aufgerufen.

    Nochmals vielen Dank!
    Gruß
    Trudix


Anmelden zum Antworten