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