Threads mit vc++ 6.o

hallo @all!

ich habe ein ziemlich dringendes problem, und zwar: THRAED’s. fuer mein vorhaben muss ich mit verschiedenen threads arbeiten. bisher habe ich alles in EIN (in zahlen 1) thread sprichen eine thread-funktion geschmissen. das muss anders werden. und zar mehrere threads mit unter schiedlichen prioritaeten. so weit so gut. und von der theorie her auch komplett klar. praktisch, hmm. gut. ich kann zumindest einen thread starten (_thread = AfxBeginThread(GrabberThread, (LPVOID)_threadData, liPriority):wink:. DOCH nun das problem: ich bekomme sie nicht sauber herunter gefahren, sprich beendet.

HANDLE hThread = _thread->m_hThread;

WaitForSingleObject(hThread, INFINITE);

obere 2 zeilen funktionieren nicht. dh den thread findet er zwar schon oder zumindest kann ein handle auf tatsache meinen thread erzeugen, jedoch das absterben des thread funktioniert nicht.
rufe ich die anweisung zum beenden des threads auf crashed das programm. die debug infos sind recht nichtssagend. die selbe anweisung habe ich auch in der OnExit funktion drin, jedoch hat er kein problem die anwendung zu schliessen. womoeglich hat das management von MFC da andere routinen, die meinen aufruf umgehen oder ueberschreiben.

ich muesste halt einen thread auch WAEHREND der laufenden appl zum stoppen bekommen. wie macht man das??

sorry fuer den langen text
gruss

hilmar

hallo,
grundsätzlich sollte der thread sich selbst beenden. d.h. du solltest zum beenden z.B. ein flag setzen, das der thread abfragt und sich, falls das flag gesetzt ist beenden.
gruß tobias

Wie man einen Thread anhält
Einen Thread solltest du nie mit einer externen Funktion terminieren. Es mag Fälle geben, in denen das funktioniert. Im Gegenzu gibt es aber eine Reihe von Fällen, wo das Probleme machen kann. Im Einfachsten Fall werden Sperren nicht korrekt freigegeben und somit andere Threads blockiert …

Wie sollte man einen Thread terminieren?

bool continue\_work = true;
bool is\_running = false;
void thread\_main()
{
 is\_running = true;
 while( continue\_thread )
 {
 // do some work
 }
 is\_running = false;
}

int main()
{
 // thread starten
 while( is\_running == false ) wait\_a\_few\_ms();
 // thread runs
 // ..
 // force thread termination
 continue\_thread = false;
 while( is\_running == true ) wait\_a\_few\_ms();
 // thread ist terminiert
}

Gruß Markus