Was passiert mit meinem Thread ..

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
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 ..

Beitrag 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?
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 583
Registriert: 05.07.2003, 11:17

Re: Was passiert mit meinem Thread ..

Beitrag 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ß
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Despotist
Establishment
Beiträge: 394
Registriert: 19.02.2008, 16:33

Re: Was passiert mit meinem Thread ..

Beitrag 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
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Was passiert mit meinem Thread ..

Beitrag 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.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Was passiert mit meinem Thread ..

Beitrag 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
Benutzeravatar
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 ..

Beitrag 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?
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Was passiert mit meinem Thread ..

Beitrag 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
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 583
Registriert: 05.07.2003, 11:17

Re: Was passiert mit meinem Thread ..

Beitrag 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.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Was passiert mit meinem Thread ..

Beitrag 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
Benutzeravatar
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 ..

Beitrag von HeinzK »

Danke für die Tipps. Ich hab's nun geschafft.
Ab morgen lesen und schreiben die ZwiAner mit neuen Routinen (Internet).
Es ist leichter, einen Sack Flöhe zu hüten.
Antworten