Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Visual C++ (6 MFC): Thread soll Editbox füllen....

ExElNeT / 6 Antworten / Baumansicht Nickles

Hi!


Ich habe ein Problem ich möchte in einem Thread eine Berechnung durchführen, die ihre zwischenergebnisse an eine Editbox ausgibt. Nur leider .... wie so oft.... geht es nicht so wie ich es mir dachte!


hier mein code:


UINT CMyThread(LPVOID lpParam)
{
 CTestitDlg* cfg = reinterpret_cast<CTestitDlg*> (lpParam);
 
 for(int i = 0;i<100;i++)
 {  
  Sleep(100);
  CString str;
  str.Format("%d", i); 
  cfg->m_Test = str;


  cfg->UpdateData(FALSE); 
 }


 return 0;
}


void CTestitDlg::OnTest()
{
 // TODO: Add your control notification handler code here
 AfxBeginThread(CMyThread, this);
}


 


Bei UpdateData(FALSE); tritt ein Fehler in der wincore.cpp auf. Wie kann ich den Code umschreiben um eine funktionierende kommunikation zwischen neben und hauptthread herzustellen?


Ich bitte um Hülfe :)

bei Antwort benachrichtigen
thomas woelfer ExElNeT „Visual C++ (6 MFC): Thread soll Editbox füllen....“
Optionen

du musst die beiden threads irgendwie synchronisieren, denn der eine thread darf nicht einfach auf daten aus dem anderen thread zugreifen. daher resultiert auch das assert das du vermutlich bekommst.

bei dem mfc samples sind aber verschiedene threading-beispiele dabei die demonstrieren wie das geht. im wesentlichen musst du irgendwo einen speicherbereich anlegen auf den beide threads zugreifen koennen...

WM_HOPETHISHELPS

this posting contains no tpyos.
bei Antwort benachrichtigen
ExElNeT thomas woelfer „du musst die beiden threads irgendwie synchronisieren, denn der eine thread darf...“
Optionen

Oh... Kennst du für syncronisation von threads in der mfc (überhaupt c++) einen Artikel? Oder hast du ein Beispiel? Ich blicke nämlich bei den Erklärungen die ich bisher gefunden habe nicht durch.

mfg ExElNeT

bei Antwort benachrichtigen
thomas woelfer ExElNeT „Oh... Kennst du für syncronisation von threads in der mfc überhaupt c einen...“
Optionen

bei den mfc beispielen sind mehrere dabei die auch threads haben. die sollte man eingentlich finden wenn man in der online-hilfe von vc++ einfach nach mfc und thread sucht...

WM_HOPETHISHELPS

this posting contains no tpyos.
bei Antwort benachrichtigen
ExElNeT thomas woelfer „bei den mfc beispielen sind mehrere dabei die auch threads haben. die sollte man...“
Optionen

Also ich habe einfach die Problemzone mit Lock() und UnLock() eingegrenzt, aber es tritt immernoch der gleiche Fehler auf :(

trotzdem schonmal danke :)

bei Antwort benachrichtigen
thomas woelfer ExElNeT „nunja es liegt scheinbar nicht am synchronisieren oder ich habe“
Optionen

du _kannst_ nicht vom einen thread auf daten vom anderen thread zugreifen - egal ob du einen lock anlegst oder nicht: das hat nix damit zu tun. bei locks geht es darum das du daten auf die zugegriffen werden _darf_ davor schuetzt von zwei threads gleichzeitig verwendet zu werden. was du brauchst ist ein datum auf das zugegriffen werden darf ...

vieleicht hilft ja ein einfaches beispiel: wenn du den thread erzeugst dann kannst du unter anderem einen lpvoid zeiger setzen. wenn du nun vorher speicher allozierst und diesen zeiger auf den bereich setzt, dann kann der zweite thread da reinschreiben (weil er den zeiger beim erzeugen des threads exoplizit uebergeben bekommt.)

der zweite thread kann nun (z.b. in der idle behandlung) auf diesen bereich schauen und nachsehen ob der erste was reingeschrieben hat.

wie gesagt: die online-doku enthaelt mfc beispiele die das machen ...

WM_HOPETHISHELPS

this posting contains no tpyos.
bei Antwort benachrichtigen
ExElNeT thomas woelfer „das reicht nicht“
Optionen

in der doku suchen? Ich blick da nicht durch... Oder kannst du nicht mein Beispiel etwas anpassen, oder ist es soviel was man machen muss?

mfg und danke ExElNeT

bei Antwort benachrichtigen