Threads



  • hallo (vorsicht hier ist ein Anfänger),
    ich habe mit dem MFC eine normal Dialogbox erstellt (mit Membervariable für eine Editbox).
    Beim Aufruf einer Schaltfläche (OnBn) soll die Daten (mittels UpdateData) geholt werden.
    Das Problem ist, bei UpdateData hängt er sich auf.

    void CCleanerDlg::OnBn()
    {
    m_pThread=AfxBeginThread(MeinThread,this,THREAD_PRIORITY_NORMAL);
    }

    UINT CMyDlg::MeinThread(LPVOID pParam)
    {
    CCleanerDlg *pfn1 = (CCleanerDlg*) pParam;
    pfn1->Inhalt();
    return 0;
    }

    void CMyDlg::Inhalt()
    {
    UpdateData(TRUE);
    .
    .
    .
    }

    ich weiß, ich bräuchte dazu einen Thread, aber das Programm geht nach UpdateData noch weiter.

    Danke



  • Sorry,

    muß

    void CMyDlg::OnBn()
    {
    m_pThread=AfxBeginThread(MeinThread,this,THREAD_PRIORITY_NORMAL);
    }

    heißen



  • CCleanerDlg *pfn1 = (CCleanerDlg*) pParam;.
    .
    .
    .
    void CMyDlg::Inhalt()
    

    Soll das so sein?



  • //Hier soll er beim betätigen der Schaltfläche den Thread aufrufen (was er auch tut).

    void CMyDlg::OnBn()
    {
    m_pThread=AfxBeginThread(MeinThread,this,THREAD_PRIORITY_NORMAL);
    }

    //das ist der Thread (ich hab noch ein paar Fehler darin ausgebessert).

    UINT CMyDlg::MeinThread(LPVOID pParam)
    {
    CMyDlg *pfn1 = (CMyDlg*) pParam;
    pfn1->Inhalt();
    return 0;
    }
    wenn er dann in dieser Funktion (Inhalt()) ist, hängt er sich bei UpdataData auf.
    void CMyDlg::Inhalt()
    {
    UpdateData(TRUE);
    .
    .
    .
    }
    //der Restder Funktion Inhalt() geht problemlos.
    Danke schon mal

    FLO



  • Probiers mal so:

    void CMyDlg::OnBn() 
    {
      UpdateData(TRUE);
      m_pThread=AfxBeginThread(MeinThread,this,THREAD_PRIORITY_NORMAL);
    }
    
    UINT CMyDlg::MeinThread(LPVOID pParam)
    {
      CMyDlg *pfn1 = (CMyDlg*) pParam;
      pfn1->Inhalt();
      return 0;
    }
    
    void CMyDlg::Inhalt()
    {
    .
    . 
    . 
    }
    

    Wenns bei UpdateData abstürzt, hast Du einen Fehler in der DoDataExchange-Funktion!

    Ansonsten liegts wohl daran, dass Dein Thread erst greift, wenn irgendwas im Dialog ungültig geworden ist!

    [ Dieser Beitrag wurde am 03.01.2003 um 10:09 Uhr von RenéG editiert. ]



  • so geht es. Was mich aber wundert ist immer noch das mit dem UpdateData (andere Globale Funktionen gehen auch). Ist der Pointer pfn1 irgendwie falsch?

    Danke

    FLO


Anmelden zum Antworten