Anzeigeproblem
-
Hallo Zusammen.
Visual Studio 2008
Ich habe das Problem, dass mir eine Anzeige nicht aktualisiert wird.
In der Funktion SetMachinechanged ist pDialog ein Nullzeiger. Seltsamerweise funktioniert das aktualisieren der Anzeige wenn ich die Funktion aus einem anderen Thread aufrufe (innerhalb der selben Klasse).
die Threads sind an sich beide identisch.
Ich könnte natürlich die Funktion aus dem anderen Thread aufrufen, jedoch müsste ich dann den aufwand von "Critica Sections" betreiben.
Kann mir jemand helfen?
Hier der Code:UINT c_MachineHed::MachThread (LPVOID pParam)
{
c_MachineHed *pThis=(c_MachineHed*)pParam;
while (!pThis->m_bStopMachThread)
{
pThis->ConnectMaschine();
if (pThis->m_UpdateMachineVisu == TRUE)
{
pInterfaceMachine_g->SetMachineChanged();
pThis->m_UpdateMachineVisu = FALSE;
}
::Sleep (50);
}
pThis->m_bMachThreadRunning=FALSE;
return 0;
};mein SetMachineChanged aktualisiert mir die Visu:
void c_MachineHed::SetMachineChanged ()
{
CWnd *pDialog=AfxGetMainWnd ();
if (pDialog && pDialog->GetSafeHwnd ())
{
pDialog->PostMessage (wmUpdateMachine, NULL, NULL);
}
}
-
Ich weiss zwar nicht warum es nicht geht, aber anstatt AfxGetMainWindow() zu benutzen, hab ich AfxGetApp()-> GetMainWindow() gut funktioniert.
-
Viel Afx Funktionen wie auch AfxGetMainWnd sind threadbezogen.
D.h. Jeder CWinThread kann ein eigenees AfxGetMainWnd haben!
-
Und wie kann ich meinem Thread mitteilen zu welchem Fenster er gehört?