004
21.06.2003, 21:21 Uhr
Dirk22
|
Danke für deine Antwort. Theoretisch könnte ich diese Funktion schon direkt aufrufen, aber der Klassenassistent hat sie unter protected eingefügt. Und ich weiss jetzt auch nicht, ob es so gut ist, diese Funktion jetzt von Hand in eine public Sektion zu stecken.
Ich zeige das Problem mal genauer auf:
In der MainFrame.h steht unter anderem das:
C++: |
CWinThread* pThread; . . . // Generierte Message-Map-Funktionen protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnButtonStart(); afx_msg void OnButtonStop(); afx_msg void OnUpdateButtonStop(CCmdUI* pCmdUI); afx_msg void OnUpdateButtonStart(CCmdUI* pCmdUI); //}}AFX_MSG DECLARE_MESSAGE_MAP()
|
In der MainFrame.cpp steht unter anderem das:
C++: |
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(ID_BUTTON_START, OnButtonStart) ON_COMMAND(ID_BUTTON_STOP, OnButtonStop) ON_UPDATE_COMMAND_UI(ID_BUTTON_STOP, OnUpdateButtonStop) ON_UPDATE_COMMAND_UI(ID_BUTTON_START, OnUpdateButtonStart) //}}AFX_MSG_MAP END_MESSAGE_MAP() . . . //Im Konstruktor der MainFrame: pThread = AfxBeginThread (MyCalcFunction, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); //Ende Konstruktor der MainFrame . . . ///////////////////////////////////////////////////////////////////////////// // CMainFrame Nachrichten-Handler
void CMainFrame::OnButtonStart() { StopClicked = false; pThread->ResumeThread(); }
void CMainFrame::OnButtonStop() { StopClicked = true; pThread->SuspendThread(); }
void CMainFrame::OnUpdateButtonStop(CCmdUI* pCmdUI) { if (StopClicked) pCmdUI->Enable(false); else pCmdUI->Enable(true); }
void CMainFrame::OnUpdateButtonStart(CCmdUI* pCmdUI) { if (!StopClicked) pCmdUI->Enable(false); else pCmdUI->Enable(true); }
UINT MyCalcFunction( LPVOID pParam ) { CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
while(!StopClicked) { //Berechnung } //an dieser Stelle möchte ich die Funktion OnButtonStop() aufrufen //bisher habe ich es so gemacht: pMain->OnButtonStop() //dies wurde aber nur kompiliert, wenn ich im Headerfile die Funktion //unter public gesteckt habe, und dann hat es aber doch nichts genützt //da das Programm dann immer an dieser Stelle abgestürzt ist return 0; }
|
Ich habe mir jetzt den Link angeschaut, aber leider komme ich damit nicht zurecht, was ich hier in meinem Fall genau tun soll. Ich weiss nicht, wie ich die einzelnen Parameter der Funktion Post- oder SendMessage füllen soll. Dies hier ist auch nur ein Beispielprogramm das die Problematik die ich habe darstellt. Es soll hier keine Rolle spielen, ob es in diesem Fall Sinn macht, die Stopbuttonroutine am Ende des Threads aufzurufen, oder nicht. In dem Programm, in dem ich das anwenden will, macht es Sinn. Ich will wirklich einfach nur aus diesem Thread heraus, die Nachrichtenbehandlungsroutine bzw. Funktion OnButtonStop() aufrufen, welche mit dem Klassenassistent erstellt wurde.
Ich hoffe, dass ihr mir helfen könnt
Dirk |