Ende eines multithread-Programms
Ende eines multithread-Programms
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
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
Dann lass dein Programm doch einfach beim schließen der Console nicht beenden. 

PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Ende eines multithread-Programms
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:
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
Ja weil das Hauptprogramm am Ende Beendet wird.
Einfach warten:
Einfach warten:
Code: Alles auswählen
Procedure console(dummy)
OpenConsole()
Repeat
Input()
Delay(1)
ForEver
EndProcedure
WaitThread(CreateThread(@console(),0))
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Ende eines multithread-Programms
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:
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...
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 Programm wird aber schon vorher beendet.
Ich versteh das nicht...
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Ende eines multithread-Programms
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.
auch das MainProgramm, somit wird das Programm mit der Console geschlossen.
PS: Console hat in einem Thread nichts zu suchen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Ende eines multithread-Programms
Ja klar, WaitThread wartet ja auch bis der Thread zuende istteamO 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: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.Code: Alles auswählen
Procedure console(dummy) OpenConsole() Repeat Input() Delay(1) ForEver EndProcedure WaitThread(CreateThread(@console(),0)) Delay(50000) End
Das Programm wird aber schon vorher beendet.
Ich versteh das nicht...


@ts-soft: Console hat sehrwohl was in EINEM Thread zu suchen.
Zuletzt geändert von DarkDragon am 22.02.2011 16:51, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Re: Ende eines multithread-Programms
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
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Ende eines multithread-Programms
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...
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...
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Ende eines multithread-Programms
@DarkDragon
Der Thread endet doch, sobald die Console geschlossen wird, ist auch der Thread zu ende.
Der Thread endet doch, sobald die Console geschlossen wird, ist auch der Thread zu ende.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
