Announcement

Collapse
No announcement yet.

Thread soll ende eines weiteren Threads feststellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Thread soll ende eines weiteren Threads feststellen

    Hallo,

    aus einem Thread heraus starte ich einen weiteren Thread.
    Wie kann ich im ersten Thread feststellen ob der zweite noch läuft?

    Versuche wie:
    void __fastcall Thread1::Execute()
    {
    while (!this->Terminated){
    if (Thread2->waitfor()) { // oder if (Thread2)
    // ok thread 2 beendet.
    }
    }
    }
    funtkionieren nicht. Im ersten Fall erhalte ich eine Exception
    EThread mit der Meldung 'Thread-Fehler': das Handle ist ungültig(6)'.
    In Thread 2 habe ich ReturnValue=1 gesetzt...nutzt aber nichts.
    Wie kann ich in Thread1 zuverlässig feststellen ob Thread2 beendet wurde?

  • #2
    Warten, bis ein Thread vollständig ausgeführt ist

    Wenn die vollständige Ausführung eines anderen Threads abgewartet werden muss, wird die Methode TThread.WaitFor dieses anderen Threads aufgerufen. WaitFor wird erst beendet, wenn der andere Thread beendet ist, das heißt, entweder nach Ausführung seiner Methode TThread.Execute oder nach einer Exception. Im folgenden Beispiel wird gewartet, bis ein anderer Thread ein Thread-Listenobjekt eingefügt hat. Erst dann erfolgt der Zugriff auf die Objekte in der Liste:


    if (pListFillingThread->WaitFor())
    {
    TList *pList = ThreadList1->LockList();
    for (int i = 0; i < pList->Count; i++)
    ProcessItem(pList->Items[i]);
    ThreadList1->UnlockList();
    }
    In diesem Beispiel wird nur dann auf die Listenelemente zugegriffen, wenn die Methode WaitFor signalisiert hat, dass die Liste erfolgreich gefüllt wurde. Dieser Rückgabewert muss von der Execute-Methode desjenigen Threads zugewiesen werden, auf den gewartet wurde. Da das Ergebnis der Thread-Ausführung allerdings nur für die Threads relevant ist, welche die Methode WaitFor aufrufen, und nicht für Quelltext, der Execute aufruft, gibt die Methode Execute keinen Wert zurück. Stattdessen setzt sie die Eigenschaft TThread.ReturnValue. ReturnValue wird von der Methode WaitFor zurückgeliefert, wenn diese von anderen Threads aufgerufen wird. Rückgabewerte sind Integerwerte. Ihre Anwendung legt deren Bedeutung fest.

    Verwandte Konzepte
    Warten, bis eine Aufgabe ausgeführt ist
    Christian

    Comment

    Working...
    X