Debug Assertion bei Multithreadanwendung
-
Hallo,
ich habe ein Multithreadanwendung geschrieben, jedoch tritt bei Ausfuehrung des Programms eine Fehlermeldung auf: Debug Assertion failed, LINE:884, File wincore.cppHier erstmal ein Teil meines Codes:
void CMIEZE_cDlg::thrRun1()
{
while (m_Flag)
{
cs.Lock();
UpdateData(true);
m_var*=2;
UpdateData(false);
Sleep(100);
cs.Unlock();
}
}Ich bin mir sehr sicher, dass das Problem bei UpdateData liegt, aber ich weiss nicht warum und wie ich das Problem umgehen kann.
Kann mir jemand helfen?
Vielen Dank, Markus.
-
aber ich weiss nicht warum und wie ich das Problem umgehen kann.
UpdateData aus dem window thread aufrufen
-
Sorry, ich mach noch nicht allzu lange was mit MFC, darum vielleicht jetzt eine etwas bloedde Frage... Wo genau soll ich das UpdateData reinschreiben? In OnInitDialog()?
Danke,
Markus.
-
Schick ne benutzerdefinierte Nachricht an den Dialog und lass diesen mit ner Methode(die UpdateData aufruft) darauf reagieren.
MfG Spacelord
-
Koenntest Du mir ein kurzes Beispiel schicken, wie ich die Nachricht an meinen Dialog schicke?
-
Ich habe versucht eine Nachricht an den Dialog zu schicken. Der Code sieht so aus:
UINT CMIEZE_cDlg::thrFunction1(LPVOID pParam)
{
CMIEZE_cDlg* pDlg = (CMIEZE_cDlg*) pParam;
pDlg->thrRun1();
pDlg->PostMessage(WM_UPDATEDATA);
return 0;
}void CMIEZE_cDlg::thrRun1()
{
while (m_Flag)
{
cs.Lock();
sc.SerOpen("COM1","DTR");
m_volt1=sc.GetVoltage(1);
CMIEZE_cDlg* pDlg;
sc.SerClose();
cs.Unlock();
Sleep(100);
}
}LRESULT CMIEZE_cDlg::OnThreadUpdate(WPARAM wParam,LPARAM lParam)
{
UpdateData(false);
return 0;
}Leider klappt das ganze noch nicht so wie ich will. Die Nachricht wird immer erst dann gesendet, wenn der Thread beendet wird, ich moechte aber die Daten aktualisieren waehrend der Thread ausgefuehrt wird. Was hab ich falsch gemacht???
-
Nimm SendMessage statt PostMessage, dann muss der aufrufer warten bis der aufgerufene fertig ist.