Thread Killen
-
Ich hab 2 Threads.Der eine als TimeOut überwachung. Wie kann ich den ersten Thread über den zweiten beenden.Bitte mit kleinem Bsp. da noch beginner.
CWinThread* pThread1 = AfxBeginThread (thr1, this);// Eigentliche Funktion CWinThread* pThread2 = AfxBeginThread (thrTimeOut, this);// TimeOut überwachung void CTestDlg::thrTimeOut() { Sleep(2000); if(irgendwas == nicht i.o.) { Kille Thread1 // Was kommt hier rein ?? } }
-
Du brauchst die TerminateThread Funktion. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminatethread.asp
BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode );fürs Handle benutze einfach die m_hThread Membervariable der CWinThread Klasse
-
Kannst Du das noch etwas genauer erklären ??
THX
-
Was ist denn unklar?
CWinThread* pThread1 = AfxBeginThread (thr1, this);// Eigentliche Funktion CWinThread* pThread2 = AfxBeginThread (thrTimeOut, this);// TimeOut überwachung //... void CTestDlg::thrTimeOut() { Sleep(2000); if (/*something isn't ok, do...*/) { pThread1->m_bAutoDelete = TRUE; TerminateThread(pThread1->m_hThread,0); } }[ Dieser Beitrag wurde am 25.06.2003 um 08:46 Uhr von Shlo editiert. ]
-
!!! Ein Thread sollte NUR IN DEN SELTENSTEN Fällen terminiert werden !!!
Da ein Thread meist eine lange Schleife darstellt, kann man doch das Timeout in diese Schleife setzen.
-
Mein Problem ist aber, das ich in einem Thread Daten aus dem I-Net erwarte. Kommt aber nix hägt mein Thread da fest.
void CTestDlg::thr1() { Connect = "http://www.test.de/test.txt"; CInternetSession session; CStdioFile* emm=session.OpenURL(Connect,1, INTERNET_FLAG_TRANSFER_BINARY); emm->Read (DATEN,2048); // Hier hängt es sich logischerweise auf,wenn // keine Daten ankommen! }Wie kann ich das sonst eleganter lösen ??
-
Lies Dir mal was über ReadFile und dort das Zeuch über die OVERLAPPED Struktur durch.
-
Hm, komme irgendwie nicht weiter.
-
Hab zwar allerhand gelesen aber nix verstanden. Hat nicht irgend jemand ne idee.
-
Bevor du mit Threads und Sockets was machts nimm lieber die Klasse
CAsyncSocket
Die erledigt das für dich.