Thread GetExitCodeThread usw....
-
Also ich erstelle diverse Threads und speicher das cwinthread objekt in einem cobarray... wenn ich jetzt das cwinthread objekt wieder aus dem cobarray hole und versuche das handle dieses objekts zu benutzen, um die den exitcode zu überprüfen kommt eine speicherzugriffs verletzung...
code:
class CMeinDia { CObArray threadAry; } void CMeinDia::Methode23222 { CWinThread* thread = AfxBeginThread(CMyThread, obA); threadAry.Add(thread); } void CMeinDia::OnTimer(UINT nIDEvent) { for(int i = 0; i < threadAry.GetSize(); i = i++) { CWinThread* thread = reinterpret_cast<CWinThread*> (threadAry.GetAt(i)); CObArray* obA = reinterpret_cast<CObArray*> (threadAry.GetAt(i+1)); LPDWORD l; if(GetExitCodeThread(thread->m_hThread, l)) //ganz böser speicherfehler { threadAry.RemoveAt(i); threadAry.InsertAt(i, AfxBeginThread(CMyThread, obA)); } } CDialog::OnTimer(nIDEvent); }
danke schonmal
MfG ExElNeT
-
warum kommt dort eine speicherzugriffsverletzung? niemand hat eine ahnung?
MfG
ExElNeT
-
Weil sich das Objekt beim Beenden des Threads automatisch löscht
-
thread->m_bAutoDelete = FALSE; // nach dem ersten starten des threads bringt auch nix.
0xC0000005: Zugriffsverletzung-Schreibposition 0x00000000
MfG
ExElNeT
-
hier ein funktionierender Code... dieses system überprüft ob alle threads noch laufen und wenn einer ausgefallen ist wird er automatisch restartet...
class CMeinDia { CObArray threadAry; } void CMeinDia::meineMethode() { for(int i = 0; i < 10; i++) { CObArray* obA = new CObArray(); CString s = "Bin ein Parameter"; obA.Add(&s); threadAry.Add(AfxBeginThread(CMyThread, obA)); threadAry.Add(obA); SetTimer(ID_THREAD_TIMER, 3000, NULL); } } void CMeinDia::OnTimer(UINT nIDEvent) { for(int i = 0; i < threadAry.GetSize(); i = i+2) { CWinThread* thread = reinterpret_cast<CWinThread*> (threadAry.GetAt(i)); CObArray* obA = reinterpret_cast<CObArray*> (threadAry.GetAt(i+1)); LPDWORD l = new DWORD; GetExitCodeThread(thread->m_hThread, l); if(*l != STILL_ACTIVE) { thread = AfxBeginThread(CMyThread, obA); } } CDialog::OnTimer(nIDEvent); }
vielleicht was für die faq
MfG
ExElNeT[ Dieser Beitrag wurde am 20.11.2002 um 16:05 Uhr von ExElNeT editiert. ]
[ Dieser Beitrag wurde am 20.11.2002 um 16:06 Uhr von ExElNeT editiert. ]
[ Dieser Beitrag wurde am 20.11.2002 um 16:22 Uhr von ExElNeT editiert. ]