Filou Geschrieben 13. April 2006 Teilen Geschrieben 13. April 2006 Hi, ich habe immernoch das Problem mit meinem Thread. Ich habe jetzt gelesen dass man das über die PostMessage() macht. Ich sende also jetzt pWnd->PostMessage(WM_THREAD_END, 0, 0); in meinem Thread wenn dieser beendet wird. Definiert ist die Nachricht so: #define WM_THREAD_END WM_APP + 1 Dann habe ich einen Eintrag in BEGIN_MESSAGE_MAP hinzugefügt. So wie es der Klassenassistent bei WM_KEYDOWN macht. BEGIN_MESSAGE_MAP(CScannenDlg, CDialog) //{{AFX_MSG_MAP(CScannenDlg) WM_THREAD_END() //}}AFX_MSG_MAP END_MESSAGE_MAP() In der MessageMap habe ich meine Nachricht auch bekannt gemacht. So: #define WM_THREAD_END() \ { WM_THREAD_END, 0, 0, 0, AfxSig_vwww, \ (AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&OnThreadEnd }, Dann habe ich noch die Funktion angelegt die Aufgerufen werden soll wenn der Thread beendet ist. So: void CScannenDlg::OnThreadEnd() { MessageBox("TEST") ; } Aber ich komme nie an meiner MessageBox an. Irgendwas muss noch falsch sein. Könnt Ihr mir bitte helfen? PPS: Jetzt habe ich es so, dass WM_THREAD_END in BEGIN_MESSAGE_MAP bekannt ist, allerdings nicht im Thread. pWnd->PostMessage(WM_THREAD_END, 0, 0); Das mag er nicht.... Obwohl es ja in AFXMSG_.H definiert ist und auch im Dialog bekannt zu sein scheint. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. April 2006 Teilen Geschrieben 13. April 2006 #define WM_THREAD_END WM_APP + 1 ... #define WM_THREAD_END() \[/code]Fällt dir was auf? Es ist sicher nicht gut, wenn dein Messagemap-Makro genauso geschrieben wird wie deine Nachricht. Du brauchst auch gar kein eigenes Makro. Du kannst das mit ON_MESSAGE machen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Filou Geschrieben 13. April 2006 Autor Teilen Geschrieben 13. April 2006 Fällt dir was auf? Es ist sicher nicht gut, wenn dein Messagemap-Makro genauso geschrieben wird wie deine Nachricht. Du brauchst auch gar kein eigenes Makro. Du kannst das mit ON_MESSAGE machen. Danke für Deine Antwort Klotzkopp Ja ich habe entdeckt dass es daran gelegen hat dass es bei BEGIN_MESSAGE_MAP nicht geklappt hat. Das habe ich rausgenommen. aber dafür war das Define nicht mehr in dem Thread bekannt. Was meinst Du das mit ON_MESSAGE? Wenn ich das Verwende muss ich es doch irgendwie meiner Funktion zuweisen, dass die Funktion aufgerufen wird wenn der Thread beendet ist. Wie mache ich das? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. April 2006 Teilen Geschrieben 13. April 2006 Was meinst Du das mit ON_MESSAGE? Wenn ich das Verwende muss ich es doch irgendwie meiner Funktion zuweisen, dass die Funktion aufgerufen wird wenn der Thread beendet ist. Wie mache ich das? Steht in der MSDN Library: ON_MESSAGE(WM_THREAD_END, DeineMemberFunktion) Die Funktion muss so aussehen: afx_msg LRESULT DeineMemberFunktion( WPARAM wParam, LPARAM lParam); Und es muss natürlich eine nichtstatische Memberfunktion der Klasse sein, zu der die Messagemap gehört. Die Namen den Parameter sind wurscht. Da drin landen Parameter 2 und 3 von Post-/SendMessage. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Filou Geschrieben 13. April 2006 Autor Teilen Geschrieben 13. April 2006 Super geil! Das klaptt!!! TAUSEND DANK!!!!! :e@sy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.