Seite 1 von 2
Ende eines multithread-Programms
Verfasst: 22.02.2011 15:56
von teamO
Hi,
bin grad auf ein Problem mit dem Beenden eines multi-thread-Programms gestoßen:
in dem Programm wird in einem thread ein Konsolenfenster geöffnet.
das Problem: sobald das Fenster geschlossen wird, werden alles threads gekillt -das will ich aber nicht: das Programm soll weiter laufen.
Hab schon in der Hilfe nachgeschaut, aber da steht, dass ein Multithreadprogamm endet, wenn das Hauptprogramm beendet wird, was bei mir ja nicht der Fall war...
hat jemand ne idee, woran das liegt? oder wie ich das am besten hinbekomm?
Grüße,
teamO
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:01
von STARGÅTE
Dann lass dein Programm doch einfach beim schließen der Console nicht beenden.

Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:07
von teamO
hä?
das ist doch grad das Problem.
ok, was ich geschrieben hab war vielleicht missverständlich. Was ich sagen wollte:
ich lass das Programm nicht schließen, wenn die Console beendet wird. es beendet sich selbst.
sieht ungefähr so aus:
Code: Alles auswählen
Procedure console(dummy)
OpenConsole()
Repeat
Input()
Delay(1)
ForEver
EndProcedure
;bla bla bla
CreateThread(@console(),0)
;bla bla bla
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:17
von STARGÅTE
Ja weil das Hauptprogramm am Ende Beendet wird.
Einfach warten:
Code: Alles auswählen
Procedure console(dummy)
OpenConsole()
Repeat
Input()
Delay(1)
ForEver
EndProcedure
WaitThread(CreateThread(@console(),0))
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:36
von teamO
das funktioniert bei mir nicht.
nur zur sicherheit, dass wir nicht aneinander vorbei reden: Hauptprogramm = programmteil, der nicht in externen threads gestartet wurde?
hier mal dein Beispiel:
Code: Alles auswählen
Procedure console(dummy)
OpenConsole()
Repeat
Input()
Delay(1)
ForEver
EndProcedure
WaitThread(CreateThread(@console(),0))
Delay(50000)
End
Das delay wird nicht mehr erreicht. nach meinem Verständnis von waitThread müsste es aber direkt nachdem die console geschlossen wird "ausgeführt" werden.
Das Programm wird aber schon vorher beendet.
Ich versteh das nicht...
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:49
von ts-soft
Ein Process kann nur eine Console haben. Befindet sich diese in einem Thread, ist dieser Thread damit
auch das MainProgramm, somit wird das Programm mit der Console geschlossen.
PS: Console hat in einem Thread nichts zu suchen.
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:50
von DarkDragon
teamO hat geschrieben:das funktioniert bei mir nicht.
nur zur sicherheit, dass wir nicht aneinander vorbei reden: Hauptprogramm = programmteil, der nicht in externen threads gestartet wurde?
hier mal dein Beispiel:
Code: Alles auswählen
Procedure console(dummy)
OpenConsole()
Repeat
Input()
Delay(1)
ForEver
EndProcedure
WaitThread(CreateThread(@console(),0))
Delay(50000)
End
Das delay wird nicht mehr erreicht. nach meinem Verständnis von waitThread müsste es aber direkt nachdem die console geschlossen wird "ausgeführt" werden.
Das Programm wird aber schon vorher beendet.
Ich versteh das nicht...
Ja klar, WaitThread wartet ja auch bis der Thread zuende ist

. Da der Thread aber ja NIE, wirklich NIE endet (desshalb auch ForEver und nicht MaybeForEver

) kommt es auch nie aus WaitThread raus.
@ts-soft: Console hat sehrwohl was in EINEM Thread zu suchen.
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 16:51
von Bisonte
Code: Alles auswählen
Procedure console(dummy)
OpenConsole()
Repeat
Input()
Delay(1)
ForEver
EndProcedure
t = CreateThread(@console(),0)
Repeat
If IsThread(t)
Quit = 0
Else
Quit = 1
EndIf
Until Quit = 1
Debug "Ende"
End
Das Debug wird am Ende nur erreicht, wenn Threadsafe eingeschaltet ist... auch komisch... oder ?
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 17:01
von teamO
ok, danke für die Antworten
jetzt ist mir immerhin schon mal klar, an was es liegt...
aber kann ich irgendwie verhindern, dass alles mit dem schließen der Console beendet wird?
das würde sich ja auch nicht ändern, wenn ich die console aus dem thread raus ins hauptprogramm verlege...
Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 17:03
von ts-soft
@DarkDragon
Der Thread endet doch, sobald die Console geschlossen wird, ist auch der Thread zu ende.