Menü blockiert Programm

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
techniker
Beiträge: 184
Registriert: 27.01.2016 11:08
Wohnort: BY

Menü blockiert Programm

Beitrag von techniker »

Hi,

ich habe festgestellt, dass wenn man ein Menü im laufenden Programm öffnet selbiges solange "stehen" bleibt..?!?
Kann man dies verhindern?

In meinem Programm muss ich zyklisch (alle 500ms) eine Netzwerk-Aktion ausführen. Bleibt diese aus wird ein Verbindungsabbruch detektiert. :|

Danke!
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Menü blockiert Programm

Beitrag von Bisonte »

Entweder lagerst du deine zyklische Netzwerkaktion in einen Thread aus, oder du benutzt AddWindowTimer()

Will heissen ein TimerEvent das alle 500ms ausgelöst wird. Damit sollte das Programm auch bei einem offenem Menü
weiter deine Netzwerkaktion ausführen. (Bei fehlerfreier Event-Behandlung ;) )
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​​
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Menü blockiert Programm

Beitrag von matbal »

Um genauer zu sein: Benutze AddWindowTimer zusammen mit BindEvent. Der EventLoop hält an, wenn das Menü geöffnet ist oder das Fenster verschoben wird.

Beispiel:

Code: Alles auswählen

EnableExplicit

Enumeration 
   #MainWin
   #MainWin_Menu
   #MainWin_Menu_Item1
   #MainWin_Timer_1
EndEnumeration


Procedure TimerProc()
   Debug "Timer Bindevent"
EndProcedure


OpenWindow(#MainWin, 100, 100, 400, 300, "Programm")

If CreateMenu(#MainWin_Menu, WindowID(0))
   MenuTitle("Datei")
   MenuItem(#MainWin_Menu_Item1, "Menü 1")
EndIf

AddWindowTimer(#MainWin, #MainWin_Timer_1, 500)
BindEvent(#PB_Event_Timer, @TimerProc(), #MainWin, #MainWin_Timer_1)

Repeat
   Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
         Break
         
      Case #PB_Event_Menu
         Select EventMenu()
            Case #MainWin_Menu_Item1
               Debug "Menu 1"
         EndSelect
         
      Case #PB_Event_Timer
         Select EventTimer()
            Case #MainWin_Timer_1
               Debug "Timer"
         EndSelect
         
   EndSelect
ForEver
Benutzeravatar
techniker
Beiträge: 184
Registriert: 27.01.2016 11:08
Wohnort: BY

Re: Menü blockiert Programm

Beitrag von techniker »

Danke matbal! 8)

Der Tipp mit BindEvent ist Gold wert.. :mrgreen:
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
Antworten