Im Thread Fenster schließen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Im Thread Fenster schließen

Beitrag 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 :D

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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

Code: Alles auswählen

PostMessage_(WindowID(0), #WM_CLOSE, 0, 0)
c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@nco2k
Vielen Dank :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
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

Beitrag 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
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.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten