UpdateData() bei statischer Funktion?



  • Wie kann ich in einer statischen Funktion ein UpdateData() einbauen???
    Es kommt immer die folgende Fehlermeldung, weil UpdateData ja nicht statisch ist:
    d:\C-Programme\Time-Thread\Time-ThreadDlg.cpp(178): error C2352: 'CWnd::UpdateData::CWnd::UpdateData' : Unzulässiger Aufruf einer nicht statischen Memberfunktion

    Meine Funktion:

    UINT CTimeThreadDlg::thrFunction(LPVOID pParam) 
    { 
        int* pFlag = (int*) pParam;
        while (*pFlag)  
        { 
            Sleep(1); 
            m_iZeitMS+=1;
            UpdateData(TRUE);
            m_sCount.Format("%d", m_iZeitMS);
            UpdateData(FALSE);
        } 
        return 0; 
    }
    

    mfg
    Fink Christoph



  • Du mußt der Funktion noch einen Zeiger auf das Dialogobjekt mitgeben. Dann kannst Du das aufrufen. Als Hilfsmittel kannst Du dafür pParam verwenden, wenn Du da nicht das Flag übergibst, sondern eine Struktur:

    struct Helper
    {
    int Flag;
    CYourDialog* pDlg;
    };
    
    UINT CTimeThreadDlg::thrFunction(LPVOID pParam) 
    { 
       Helper* pHelper = (Helper*)pParam;
       while (pHelper->Flag)  
        { 
            Sleep(1); 
            m_iZeitMS+=1;
            pHelper->pDlg->UpdateData(TRUE);
            m_sCount.Format("%d", m_iZeitMS);
            pHelper->pDlg->UpdateData(FALSE);
        } 
        return 0; 
    }
    

    Dort wo Du die Originaldaten für pParam anlegst, mußt Du nun eine Struktur Helper verwenden und dort in pDlg den this-Zeiger des zugehörigen Dialogs reinschreiben.

    Btw: bei Dialogen kannst Du für Timer-Funktionen auch gleich direkt eine Memberfunktion des Dialogs über den Timer aufrufen lassen - OnTimer. Siehe Hilfe. Dann entfällt der Umweg über statische Funktionen.



  • 1. Wo muss die struct Funktion hin??? Und ich habe keine Daten für pParam, also was/wo muss ich hier machen????
    2. Ich habe es zuerst mit OnTimer gemacht, aber ich brauche eine ziehmlich genaue Zeitangabe und die OnTimer - Funktion stimmte im Win ME zu Win 2k/XP um 2 Kommastellen nicht!!!!

    So starte ich den Thread:
    CWinThread* pThread = AfxBeginThread (thrFunction, &m_Flag);

    Muss ich hier anstatt "&m_Flag" den Helper nehmen????

    [ Dieser Beitrag wurde am 24.08.2002 um 19:30 Uhr von Fink Christoph editiert. ]


Anmelden zum Antworten