threadsteuervariable ändert ohne explizite zuweisung ihren wert
-
hallo,
kurze beschreibung des programmaufbaus:
ich starte einen "eltern_thread" der wiederum child_threads startet.
der eltern_thread steuert die child_threads mit 2 variablen (terminate, work)
terminate sagt ob ein thread geschlossen werden soll oder nicht.
work sagt ob der thread arbeit hat oder nicht ...als ich den code debuggt habe, fiel mir auf, das terminate (datentyp: bool)
den wert irgendeinen zufälligen wert zwischen 0 und 255 annimmt ...
was mich ein wenig stutzig stimmt, da einen bool variable nur true oder false sein kann ...nach weiterem debuggen kam ich an folgende abfrage:
while(!terminate){ ... }
die ist eine schleife im child_thread, die solange nudeln soll, bis terminate auf true gesetzt ist ...
-> und wenn terminate den wert 53 hat wird die schleife nie aufgerufen.
und nun frage ich mich, wie terminate 53 sein kann obwohl ich im konstruktor der child_thread klasse die variable explizit auf false gesetzt habe ...damit mein beitrag nicht so groß wird, gebe ich euch einen link mit einer gezippten form meines projektes.
zip: http://matthias.sybcom.de/stuff/nsc.zip
sfx: http://matthias.sybcom.de/stuff/nsc.exeich danke euch im vorraus.
gruß xerxesps:
falls jemand eine bessere lösung weiss, wie man einem worker_thread bzw in meinem fall einem child_thread arbeit erteilt sprich: dem thread sagen kann wann er arbeiten soll und wann nicht, nimm ich dies herzlich an. denn meine variante scheint nicht so toll zu seinedit1:
thread.h/thread.cpp -> enthält die eltern_thread klasse
thread_solv.h/thread_solv.cpp -> enthält die child_thread klasse
-
thread t ist bei dir eine lokale Variable in CNsctestumgebungDlg::OnOK().
Sobald OnOK beendet ist, wird t zerstört, und mit ihm alle Instanzen von sup_thread, und damit auch deren Member terminate. Du arbeitest mit Objekten, die längst wieder zerstört sind.