Was passiert mit meinem Thread ..
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Was passiert mit meinem Thread ..
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?
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?
Es ist leichter, einen Sack Flöhe zu hüten.
- Lord Delvin
- Establishment
- Beiträge: 598
- Registriert: 05.07.2003, 11:17
Re: Was passiert mit meinem Thread ..
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ß
Gruß
Re: Was passiert mit meinem Thread ..
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
Despotist
Re: Was passiert mit meinem Thread ..
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.
Einfach WaitForSingleObject (oder aehnliches, je nach Umstand) aufrufen und gut ist es. Einfach, sauber und CPU-schonend.
- kimmi
- Moderator
- Beiträge: 1412
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: Was passiert mit meinem Thread ..
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
Gruß Kimmi
[1] http://www.zdnet.de/anwendungsentwicklu ... 7412-1.htm
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Was passiert mit meinem Thread ..
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?
Eine Frage noch:
WaitForSingleObject(..):
Habe ich das richtig verstanden, dieser Befehl wartet nicht, sondern
gibt den momentanten Status zurück?
Es ist leichter, einen Sack Flöhe zu hüten.
- kimmi
- Moderator
- Beiträge: 1412
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: Was passiert mit meinem Thread ..
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
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
- Lord Delvin
- Establishment
- Beiträge: 598
- Registriert: 05.07.2003, 11:17
Re: Was passiert mit meinem Thread ..
ö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)kimmi hat geschrieben:MT-Programmierung ist schlimmer als einen Sack voll Flöhe zu hüten.
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.
- kimmi
- Moderator
- Beiträge: 1412
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: Was passiert mit meinem Thread ..
Es gibt verschiedene Gründe, Multithreading zu nutzen. Nicht immer ist das Parallelisieren das einzige Argument. Beim Parallelisieren aber ist OpenMP schick :).
Gruß Kimmi
Gruß Kimmi
- HeinzK
- Establishment
- Beiträge: 234
- Registriert: 05.11.2009, 08:37
- Benutzertext: ZwiAner
- Echter Name: Heinz Kempter
- Wohnort: Wald
- Kontaktdaten:
Re: Was passiert mit meinem Thread ..
Danke für die Tipps. Ich hab's nun geschafft.
Ab morgen lesen und schreiben die ZwiAner mit neuen Routinen (Internet).
Ab morgen lesen und schreiben die ZwiAner mit neuen Routinen (Internet).
Es ist leichter, einen Sack Flöhe zu hüten.