Seite 1 von 1

Timeout mit Threads - wie geht's?

Verfasst: 20. September 2006 09:55
von stevy
Hallo,

ich möchte für eine zeitkritische Funktion ein Timeout von 1 Minute festlegen.
Mein Gedanke war: ein neuer Thread, der 1 Minute wartet und dann den anderen Thread beendet. Es sei denn er hat sich selbst schon vor Ablauf der Minute beendet.
Ich konnte nicht herausfinden, wie ich das mit QThread mache.
Weiß jemand, wie es geht?

Danke, Stevy

Verfasst: 20. September 2006 10:03
von Goos
Dafuer sollte ja auch QTimer etwas praktischer sein..... oder magsts aus Uebungszwecken per Thread machen?

Goos

Verfasst: 20. September 2006 10:05
von stevy
Eine Lösung mit QTimer wäre mir auch lieb. Ist das einfacher?

Verfasst: 20. September 2006 10:06
von Goos
Natuerlich, dazu musst mehr oder weniger nur im Assistant unter QTimer schaun und dort das Beispiel abschreiben :D

Goos

Verfasst: 20. September 2006 10:20
von stevy
Dann brauch ich trotzdem Threads, denn nach der Minute soll ja der andere Thread beendet werden (sofern er noch aktiv ist).
Das Beispiel in QTimer zeigt nur, wie man die Zeit einstellt und einen Slot zuweist.

Re: Timeout mit Threads - wie geht's?

Verfasst: 20. September 2006 10:37
von Goos
Das weiss ich nicht, du erklaerst ja nicht genau genug was du moechtest :)
stevy hat geschrieben:Hallo,
Mein Gedanke war: ein neuer Thread, der 1 Minute wartet und dann den anderen Thread beendet. Es sei denn er hat sich selbst schon vor Ablauf der Minute beendet.
Darin steckt leider nur wie du es dir vorgestellt hast und nicht was du eigentlich erreichen magst.
"den anderen Thread" koennte z.B. dein GUI Thread sein und fuer "ein neuer Thread" kannst QTimer nehmen.
Deine Anwendung wird dann also nach einer Minute beendet.
Falls du ganz was anderes vor hast, dann solltest das hier mal erklaeren :)

Goos

Verfasst: 20. September 2006 10:41
von stevy
Es ist kein GUI-Thread. Es geht um zeitaufwändige Berechnungen, die manchmal sehr lange dauern können. Ich möchte praktisch die Möglichkeit haben, diese abzubrechen, wenn ein festgelegtes Timeout überschritten ist. Dabei soll nicht gleich das ganze Programm beendet werden.
Ist das Problem klar geworden?

Verfasst: 20. September 2006 10:51
von Goos
Ach so :)
Nuja, pack deine Berechnungen in dein en QThread und starte im GUI Thread deinen QTimer. Nach dessen ablauf kannst dann ja nen Abbrechen Button freigeben.
Hilfe zu QThread bietet wie immer der Assistant.
Falls du dann konkrete Probleme haben solltest, frag einfach nach :D

Goos

So könnte es gehen

Verfasst: 20. September 2006 12:33
von stevy
So könnte es gehen:

Code: Alles auswählen

class ThreadA : public QThread
{
  void run()
  {
    ThreadB* threadB = new ThreadB();
    threadB->start();
    threadB->wait(60000);
  }
}

class ThreadB : public QThread
{
  void run()
  {
    doCalculations();
  }
}
Die Frage ist nur, ob die Objekte in doCalculations beim Abbruch mit wait auch ordentlich aufgeräumt werden, oder der Thread 'brutal' abgebrochen wird?