Anfängerfragen zum Programmieren mit PureBasic.
techniker
Beiträge: 184 Registriert: 27.01.2016 11:08
Wohnort: BY
Beitrag
von techniker » 14.03.2016 10:31
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])
Bisonte
Beiträge: 2468 Registriert: 01.04.2007 20:18
Beitrag
von Bisonte » 14.03.2016 10:55
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
)
P ureB asic 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
Beitrag
von matbal » 14.03.2016 11:08
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
techniker
Beiträge: 184 Registriert: 27.01.2016 11:08
Wohnort: BY
Beitrag
von techniker » 14.03.2016 11:51
Danke matbal!
Der Tipp mit BindEvent ist Gold wert..
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])