Thread Kommunikation mit PostMessage



  • Hallo,

    ich möchte von einem Workertread eine Message an den CDialog posten, von wem aus der Workertread gestartet wurde. Der CDialog ist mit DoModal aus einem SDI-Projekt aufgerufen worden.
    Ich hab im Netz schon rumgeschaut und es so gemacht:

    #define WM_END_GPS_THREAD  (WM_APP + 1)
    afx_msg LRESULT OnEndGPSThread(WPARAM wParam, LPARAM lParam);//in MyDlg.h
    //MessageMap des Dialogs:
    ON_THREAD_MESSAGE(WM_END_GPS_THREAD,OnEndGPSThread)
    
    //Funktion
    LRESULT  CMyDlg::OnEndGPSThread(WPARAM wParam, LPARAM lParam)
    {
    //Do Something...
    	return LRESULT();
    }
    

    Nun Kriege ich beim Kompilieren diesen Fehler:
    1>.\MyDialog.cpp(38) : error C2440: 'static_cast': 'LRESULT (__cdecl CMyDialogDlg::* )(WPARAM,LPARAM)' kann nicht in 'void (__cdecl CWinThread::* )(WPARAM,LPARAM)' konvertiert werden
    1> Keine Funktion mit diesem Namen im Gültigkeitsbereich stimmt mit dem Zieltyp überein.

    Will der Kompiler, das ich die Funktion in einer abgeleiteten CWinApp-Klasse Definiere? Dann brauche ich das aber nicht. Vielleicht ist ja das nicht der richtige Ansatz. Könnt ihr mir weiterhelfen?
    Micha


  • Mod

    Thread Messages können in dieser Form nur von CWinApp oder CWinThread Objekten erhalten werden.
    Was hindert Dich einfach an den Dialog direkt zu posten. Warum PostThreadMessage?



  • Was meinst du mit direkt posten? Ich hab mit multithreading noch nichts gemacht, daher keine Übersicht welche Möglichkeiten es gibt. Die, die ich versucht habe war die am häufigsten beschriebene.
    Eine Funktion vom Thread aus Starten mit einem Pointer auf dem Dialog kann ich machen, aber das schien mir unsauber. Ich wollte es sauber programmieren.
    Kannst du mir (noch) einen Tipp / Stichwort geben?


  • Mod

    Du hast On_THREAD_MESSAGES verwendet. Das verwendet man nur innerhalb eines multithreaded Programmes.

    Ansonsten verwende ON_MESSAGE!



  • Danke!


Anmelden zum Antworten