Module, die in Threads laufen, werden mit der Programmbeendigung auch beendet. Allerdings sollten die Threadobjekte immer LOCALs sein.
Es empfiehlt sich, die Anzahl der in Threads geöffneten Module einfach mitzuzählen, beispielsweise über eine Set-Get-Funktion:
Code: Alles auswählen
FUNCTION RunningThreads(nSet)
STATIC nThreadsRunning := 0
IF nSet # NIL
nThreadsRunning += nSet
ENDIF
RETURN nThreadsRunning
RunningThreads() liefert die Anzahl, RunningThreads(1) erhöht um 1, RunningThreads(-1) dekrementiert. Bei Null läuft keiner. Mit dem Erzeugen eines neuen Threads zählt man hoch, wird der Threadcode per RETURN beendet, zählt man runter. Will der Benutzer dann das Programm beenden und es laufen noch Threads, kann man über diesen Zustand informieren. Eine andere Variante wäre die Funktion "ThreadInfo()", deren Ergebnis man auswerten kann.
Man muss das allerdings nicht tun. Wie Hubert schrieb, werden bei Programmbeendigung auch alle Threads beendet. Problematisch kann das nur werden, wenn in Threads DLLs geladen werden. Das kann in diesem Fall dazu führen, dass die EXE oder eine DLL hängenbleibt.