[CWinThread] scheint sich zu beenden bei Zugriff von 'CMainFrame'
- 
					
					
					
					
 Hi, meine Anwendung (Server) baut eine TCP_IP verbindung zu einem client auf. 
 Irgendwann empfängt sie eine nachricht durch 'OnReceive()' und startet den Thread:AfxBeginThread(rMyRuntimeClass, NULL, 0, CREATE_SUSPENDED);Irgendwann sendet der Client erneut etwas und ich möchte eine Variable 'iBefehl' im Thread ändern. Sobald ich die Variable beschreibe wird 'run()' im Thread beendet - wo genau kann ich nicht sagen. 
 Ich bekomme das Beenden nur mit weil ich innerhalb von run eine while-schleife habe in der ein TRACE("...") ausgegeben wird, der dann halt aufhört.Das seltsame ist: 
 wenn ich anstelle vom 'TRAGE' folgendes einsetze klappt es und der Thread arbeitet wie er soll:AfxGetMainWnd()->SetWindowText((CString) "GetTickCount()=" + itostr(GetTickCount()))Das habe ich nur durch Zufall rausgefunden. Was kann das sein? 
 
- 
					
					
					
					
 Da musst Du schon Code zeigen. 
 Ansonsten setz doch mal Breakpoints....Auch multithreading Programme kann man super debuggen. 
 
- 
					
					
					
					
 Socket-Klasse (Subclass von 'CAsyncSocket'): // Wird bei Programmstart mit Pointer auf 'CMainFrame' initialisiert! CWnd *CCustomSocket::wParent = NULL; void CCustomSocket::OnAccept(int iErrCode) { // Neue Client Verbindung akzeptieren: // (Verbindung wird NUR benutzt um Befehle von Server zu Client und umgekehrt zu senden) aClientSocket = new CCustomSocket(); CAsyncSocket::Accept(aClientSocket); // Parent erzeugt jetzt für jeden Client einen separaten Server-Socket. // Die Verbindung wird NUR genutzt um Audiodaten (durch 'CAudioThread') an den Client zu senden. wParent->SendMessage(CSWM_ACCEPT, (WPARAM) cClientSock); } void CCustomSocket::OnReceive(int iErrCode) { CObArray oDataSets; // Befehl(e) werden von Client-Socket empfangen, Datensätze in 'oDataSets' aufnehmen // ... // Parent schreibt dann auf die Variable 'iBefehl': wParent->SendMessage(CSWM_RECEIVE, (WPARAM) this, (LPARAM) &oDataSets); }Meine Thread-Klasse: int CCustomThread::Run() { // Initialisieren: bRunThread = TRUE; do { // Nächsten Durchgang für Subclass aufrufen: if (NextRun()) // Schlafen: Sleep(iDelay); else // Thread abbrechen: bRunThread = FALSE; } while (bRunThread); return (iReturnVal); }Subclass der Thread-Klasse zur Verarbeitung: BOOL CAudioThread::NextRun() { do { // Audiodaten an Client senden: // ... // Lasse ich folgende Zeile stehen, funktioniert alles super!?! AfxGetMainWnd()->SetWindowText((CString) "GetTickCount()=" + itostr(GetTickCount())); } while (iBefehl == ASC_PLAY); return (TRUE); }Zum debuggen: 
 Die Haltepunkte, die ich im Thread setze, werden irgendwann nicht mehr erreicht. Das scheint mir ziemlich willkürlich zu sein. Ich kann zum debuggen nicht viel sagen.
 
- 
					
					
					
					
 Aber kannst Du evtl. sehen, dass der Thread beendet wird. Du siehst das doch im Debug Ausgabe Fenster. Als auch im Thread Window. 
 
