Progressbar im Thread



  • Hallo
    Also DlgsThread führt Berechnungen durch die eine zeitlang
    brauchen,der Progressbar soll den Fortschritt Anzeigen.
    Könnt ihr mir sagen wie ich Zugriff im DlgsThread
    auf die "m_ctlProgress1.SetPos(i)" bekomme.
    Danke.

    void CGddlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_PROGRESS1, m_ctlProgress1);
    }
    
    UINT DlgsThread (LPVOID Pparam)
    {
    m_ctlProgress1.SetPos(i);			//So geht es nicht
    }
    
    void CGddlg::OnBnClickedButton1()
    {
     m_ctlProgress1.SetPos(i);			//Das geht gut
     AfxBeginThread(DlgsThread, 0); 
    }
    


  • Ich mach das immer so, dass ich im Thread eine Funktion über einen Zeiger auf die Fensterklasse starte, die auf Steuerelemente zugreift.



  • @qasdfgh Danke werde ich mal testen.

    Gibt es noch andere Möglichkeiten,
    z.b extern usw...



  • Du kannst auch eine Message an den entsprechenden Dialog.

    in Stdafx.h

    #define UM_CHANGEDISPLAY	(WM_USER+1)
    

    in CGddlg.cpp

    BEGIN_MESSAGE_MAP(CGddlg, CDialog)
        ON_MESSAGE(UM_CHANGEDISPLAY,OnChangeDisplay)
    END_MESSAGE_MAP()
    
    UINT DlgsThread (LPVOID Pparam)
    {
        ::SendMessage(hWnd,UM_CHANGEDISPLAY,100,NULL); //hWnd = Handle vom Dialog
    }
    
    LRESULT CMainFrame::OnChangeDisplay(WPARAM i, LPARAM lparam)
    {
        m_ctlProgress1.SetPos(i);            
        return 0L;
    }
    

    in CGddlg.h

    afx_msg LRESULT OnChangeDisplay(WPARAM Type, LPARAM UID);
    

    Somit hast Du keine Probleme mit Threadsynconisation 😃

    Gruß Matthias


Anmelden zum Antworten