neuer Thread kann kein UpdateData ausführen

JoachimJogi

Mitglied
Hi,

hier ein kleines Testprojekt, welches mein Problem auf das mindeste reduziert.
|----------------------|
| Button1 |
|----------------------|
| m_strLog |
|----------------------|-

Wenn Buton1 gedrückt wird, soll ein Thread gestartet werden, der jede Sekunde einen Punkt in das EditFeld m_strLog hinzufügt.

Warum funktioniert das nicht so wie unten beschrieben?

C++:
void CTTTDlg::OnButton1() 
{
   UpdateData(true);
   CWinThread* pThread = AfxBeginThread (thrFunction, this); 	
}

UINT CTTTDlg::thrFunction(LPVOID pParam) 
{ 
  CTTTDlg* pDlg = (CTTTDlg*) pParam; 
  pDlg->thrRun(); 
  return 0; 
} 

void CTTTDlg::thrRun()
{
   while(1)
   {
      m_strLog+=".";
      UpdateData(false);
      Sleep(1000);
   }
}

Wenn ich mit dem Debugger durchsteppe, wirft die wincore.cpp einen Fehler beim UpdateData(false). Es funktioniert einwandfrei, wenn ich das UpdateData rausnehme und manuell (mit einem weiteren Button) ab und zu aufrufe, aber der Thread soll selbstständig aktualisieren, wenn er etwas hinzugefügt hat.

Ist das nur ein Arbeitsthread, der keinen Zugriff auf die Dialogelemente hat? Eigentlich wollte ich mit der thrFunction mir wieder Zugriff auf die Klassenvariablen verschaffen...gilt das nicht für die Dialogelemente?

Vielen Dank!
 
Du dir selbst einen Gefallen und wirf UpdateData raus. Setze den Text direkt. UpdateData bringt so viele Probleme mit sich, ich fass das Ding niemals an.
 

Neue Beiträge

Zurück