Seite 1 von 2
Im Thread Fenster schließen
Verfasst: 18.01.2007 15:57
von RSBasic
Hallo ihr lieben PB-User.
Ich habe ein kleines Problem, es ist folgendes dass ich ein Fenster habe mit einer Prozedure, die mit einem Thread gestartet wurde.
Aber ich kann im Thread leider nicht befehlen, dass das Fenster beenden soll.
Könnt ihr mir helfen? Danke
Code: Alles auswählen
Procedure Vorgang(Parameter)
Delay(1000)
CloseWindow(0)
EndProcedure
;-Window 0
If OpenWindow(0,0,0,500,200,"IPS",#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
EndIf
CreateThread(@Vorgang(), 154)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
EndIf
Verfasst: 18.01.2007 16:06
von nco2k
Verfasst: 18.01.2007 16:11
von RSBasic
@nco2k
Vielen Dank

Verfasst: 18.01.2007 17:34
von bobobo
oder so
Code: Alles auswählen
Global Quit
Procedure Vorgang(Parameter)
Delay(1000)
quit=1
;CloseWindow(0)
EndProcedure
;-Window 0
If OpenWindow(0,0,0,500,200,"IPS",#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
EndIf
CreateThread(@Vorgang(), 154)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
EndIf
Verfasst: 18.01.2007 17:53
von nco2k
@bo3
bei WaitWindowEvent() macht der code keinen sinn, da das quit=1 im thread kein event erzeugt und WaitWindowEvent() eben auf einen event wartet, bevor die schleife fortgesetzt wird. bei WindowEvent() würde deine methode zwar gehen, wäre aber immer noch nicht so das wahre.
c ya,
nco2k
Verfasst: 18.01.2007 18:23
von NicTheQuick
Dann eben WaitWindowEvent(20) oder eine andere Zahl. Beim
Fensterschließen kommt es auf die paar Millisekunden dann ja auch nicht
mehr an.
Verfasst: 18.01.2007 19:02
von ts-soft
NicTheQuick hat geschrieben:Dann eben WaitWindowEvent(20) oder eine andere Zahl. Beim
Fensterschließen kommt es auf die paar Millisekunden dann ja auch nicht
mehr an.
Erhöht auf geringfügig die CPU last, da kann man sich den Thread auch sparen. SendMessage ist IMHO die sauberste Lösung, aber WINONLY
Verfasst: 19.01.2007 10:26
von NicTheQuick
Lass das folgende Programm mal eine Zeit lang laufen. Vielleicht eine Stunde
oder sowas. Und du wirst sehen, dass keinerlei CPU-Zeit kostet.
Code: Alles auswählen
OpenWindow(0, 0, 0, 200, 200, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
Repeat : Until WaitWindowEvent(1) = #PB_Event_CloseWindow
Verfasst: 19.01.2007 11:56
von Kaeru Gaman
yo, da hast du aber ja auch nix weiteres drin.
bei ner richtigen event-schleife muss er ne menge Ifs und Selects durchackern,
auch wenn er die branches nicht ausführen muss, die prüfungen muss er durchführen...
also um das realistisch zu testen, musst du mindestens noch ein halbes dutzend Ifs einbaun.
Verfasst: 19.01.2007 15:22
von bobobo
quark . .ein if reicht
Code: Alles auswählen
Global quitask
Procedure externes()
Delay (1000)
quitask=1
EndProcedure
OpenWindow(0, 0, 0, 200, 200, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateThread(@externes(),0)
Repeat
event=WaitWindowEvent(1)
If quitask=1
Debug "AB IN DIE KNEIPE!!"
quit=1
Else
;haufenweise andere Abfragen
Debug "DU MUSST SCHACKERN!!"
EndIf
Until quit=1 Or event = #PB_Event_CloseWindow