aufgrund dieses forum-threads:
http://www.purebasic.fr/german/viewtopi ... highlight=
habe ich mal probiert geöhnliche pb-gadgets aus dem hauptprogramm in einen thread auszulagern. dabei scheint die gui ganz gut zu reagieren.
zum testen mit last werden einfach ein paar sprites pro frame angezeigt. bzw man kann auf 'recreate buttons' clicken um die buttons neu zu erstellen, was auch recht gut geht (ohne thread müsste man meist zugucken wie die einzelnen buttons langsam nacheinander erscheinen)
ich war überrascht das es so einfach ist und funktioniert, deshalb poste ich es hier. ist natürlich nur ein test. vielleicht sieht es in wirklicher anwendung schon wieder anders aus, zumal ca. 40 buttons und ein paar sprites anzeigen nicht viel ist. auch bin ich nicht sehr erfahren mit threads; vielleicht hat da jemand noch ideen.
Code: Alles auswählen
EnableExplicit
Global ww,wh,quit,gui_ready
Define n
Procedure gui_thread(param)
Protected style,hwin,i,k,event,em,eg
ww=800
wh=600
style | #PB_Window_ScreenCentered
style | #PB_Window_SystemMenu
style | #PB_Window_MinimizeGadget
hWin=OpenWindow(0, 50,100,ww+200,wh, "",style) :: AddKeyboardShortcut(0,#PB_Shortcut_Escape,10)
OpenWindowedScreen( hWin, 200,0,ww,wh, 0,0,0)
Dim butt(1,22)
For i=0 To 1
For k=0 To 22
butt(i,k) = ButtonGadget(#PB_Any, 5+i*100, 5+k*25, 90,20, "Button "+Str(i)+","+Str(k) )
Next
Next
ButtonGadget(0, 5, 5+k*25, 190,20, "recreate buttons")
gui_ready = #True
Repeat
event=WaitWindowEvent(30)
em=EventMenu()
eg=EventGadget()
Select event
Case #PB_Event_CloseWindow
quit=1
Case #PB_Event_Menu
Select em
Case 10
quit=1
EndSelect
Case #PB_Event_Gadget
Select eg
Case 0 ; recreate buttons
For i=0 To 1
For k=0 To 22
FreeGadget(butt(i,k))
butt(i,k) = ButtonGadget(#PB_Any, 5+i*100, 5+k*25, 90,20, "Button "+Str(i)+","+Str(k) )
Next
Next
ButtonGadget(0, 5, 5+k*25, 190,20, "recreate buttons")
Default
For i=0 To 1
For k=0 To 22
If eg = butt(i,k)
MessageRequester("gadget event","Button "+Str(i)+","+Str(k)+" clicked")
EndIf
Next
Next
EndSelect
EndSelect
Until quit
EndProcedure
InitSprite()
CreateThread(@gui_thread(),0)
While Not gui_ready
Delay(10)
wend
LoadSprite(0,#PB_Compiler_Home+"Examples\Sources\Data\GeeBee2.bmp")
TransparentSpriteColor(0,$ff00ff)
Repeat
For n=0 To 200
DisplayTransparentSprite(0,Random(ww),Random(wh))
Next
FlipBuffers()
ClearScreen($333333)
Until quit