Seite 1 von 1

Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 08:01
von HeinzK
Was passiert mit meinem Thread nachdem das Programm beendet ist? (Es ist mein Erster!).
Situation:
Bei den ZwiAner gibt es die Möglichkeit, sich am Ende eines Levels in die
'ZwiAner-Besten-Liste' im Internet einzutragen. Da dieser Vorgang leider
nicht ASync ablaufen kann, entsteht immer eine Wartezeit von ca. 2 .. 3 Sekunden.
Bisher hatte ich diese Routine innerhalb meiner Loop aufgerufen und das Programm
war für diesen Zeitraum 'bedienungslos'.
Nun habe ich es mal mit einem Thread probiert .. und s'läuft wie geschmiert.
Da jetzt aber unbekannt ist, ob und wann der Thread seine Arbeit macht,
besteht die Möglichkeit (2 ..3 Sekunden sind eine lange Zeit), dass der Spieler
in dieser Zeit die ZwiAner beendet.
Meine Fragen sind nun:
Stirbt der Thread mitten in seiner Arbeit?
Muss ich am Ende meines Programm etwas besonderes unternehmen?

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 08:36
von Lord Delvin
Normalerweise müsste alles vom System eingesammelt werden, wenn der mainthread zurückkehrt. Wie das unter Windows ist weis ich nicht genau, aber du solltest von dem return sowas wie thread.join() machen, dann kannst du sicher sein, dass der Thread ordentlich beendet wird. Dann wird aber immernoch gewartet, bis die Daten übertragen wurde, allerdings in einer Situation, in der der user das Programm nicht mehr benötigt.

Gruß

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 10:00
von Despotist
Ohne es genau zu wissen würde ich vermuten dass dein Thread apprupt von der Resourcen Verwaltung von Windows mit beendet wird. Daher würde ich einfach wenn du den Thread startest eine Boolvariable im Programm auf true setzen und wenn er beendet diese wieder auf false. Das beenden des Programmes knüpfst du an die Bedingung dass kein Thread läuft. Ist vielleicht nicht eleganteste Lösung aber wahrscheinlich die einfachste und schnellste.

Despotist

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 10:20
von Jörg
Die "bool-Variable" gibt es schon und wird von Windows verwaltet.
Einfach WaitForSingleObject (oder aehnliches, je nach Umstand) aufrufen und gut ist es. Einfach, sauber und CPU-schonend.

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 10:54
von kimmi
Auf jeden Fall mit einem Mutex und WaitForSingleObject arbeiten. Wenn man bei mehr als einem Thread mit einer nicht verriegelten Variable arbeitet, kann man sehr unschöne und schwer zu produzierende Fehler bekommen. Eine kleine Einführung hierzu findet man beispielsweise hier: [1].

Gruß Kimmi

[1] http://www.zdnet.de/anwendungsentwicklu ... 7412-1.htm

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 11:23
von HeinzK
Danke für die Tipps .. werde es heute abend ausprobieren.
Eine Frage noch:
WaitForSingleObject(..):
Habe ich das richtig verstanden, dieser Befehl wartet nicht, sondern
gibt den momentanten Status zurück?

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 11:53
von kimmi
WaitForSingleObject wartet darauf, daß er je nach Object, dessen Handle er hält, von diesem signalisiert bzw. benachrichtigt wird. Mann kann hierfür auch einen Timeout definieren, wenn man das will. Der Timeout schlägt dann zu, wenn die gewünschte Signalisierung nicht innerhalb deines Zeitfensters vonstatten ging. Das heißt, du signalisierst deinen Thread per z.B. SendEvent, daß er nun derjenige ist, der mit der Arbeit drann ist. Nach Fertigstellung versetzt du ihn zurück in die Warteposition.
Dazu gibt die Doku noch mehr Auskunft: http://msdn.microsoft.com/en-us/library ... 85%29.aspx .

Es handlet sich allerdings hierbei um einen direktes Win32-API-Call. Ich empfehle, dich mit Boost.Thread näher auseinanderzusetzen. Die bieten da bessere und portablere Lösungen an, die einem das leben bedeutend leichter machen. MT-Programmierung ist schlimmer als einen Sack voll Flöhe zu hüten. Selbst für Bauingenieure ( wie ich auch einer bin ;) ).

Gruß Kimmi

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 12:23
von Lord Delvin
kimmi hat geschrieben:MT-Programmierung ist schlimmer als einen Sack voll Flöhe zu hüten.
öhm ich mein wenn man keine Lust hat sich über Threads gedanken zu machen sollte man vielleicht einfach "#pragma omp parallel" verwenden(siehe openmp.org für dokumentation)
Die Einarbeitungszeit sollte ein paar Stunden betragen und der macht alles für dich. Wobei ich gestehen muss, dass man dieses spezielle Problem damit nicht brauchbar lösen kann.

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 13:06
von kimmi
Es gibt verschiedene Gründe, Multithreading zu nutzen. Nicht immer ist das Parallelisieren das einzige Argument. Beim Parallelisieren aber ist OpenMP schick :).

Gruß Kimmi

Re: Was passiert mit meinem Thread ..

Verfasst: 13.11.2009, 23:39
von HeinzK
Danke für die Tipps. Ich hab's nun geschafft.
Ab morgen lesen und schreiben die ZwiAner mit neuen Routinen (Internet).