Seite 1 von 1

WebGadget-Prozedur als Thread - wie?

Verfasst: 04.08.2022 08:58
von stab
Hallo,

gestern dachte ich noch, es liegt an den 28° im Büro, ich komme aber auch heute Morgen nicht weiter.

Ich versuche nach folgendem Muster eine Prozedur mit WebGadget als Thread laufen zu lassen.

folgendes funktioniert (Syntax also OK):

Code: Alles auswählen

Procedure _zeigeGadget(dummy)
  WebGadget(10, 0, 0, 1000, 600, "www.google.de")
EndProcedure

OpenWindow(0,0,0,1000,600,"Window",#PB_Window_ScreenCentered)

_zeigeGadget(0)

Repeat
  Select WaitWindowEvent(1) 
    Case #PB_Event_Menu
      End
  EndSelect
ForEver
dies funktioniert auch:

Code: Alles auswählen

Procedure _zeigeGadget(dummy)
  ;WebGadget(10, 0, 0, 1000, 600, "www.google.de")
  TextGadget(2,10,10,100,20,"Text")
  Repeat
    Delay(1000)
  ForEver
EndProcedure

OpenWindow(0,0,0,1000,600,"Window",#PB_Window_ScreenCentered)

CreateThread(@_zeigeGadget(),0)

Repeat
 Select WaitWindowEvent(1) 
     Case #PB_Event_CloseWindow    
      End 
 EndSelect

ForEver
aber dies nicht:

Code: Alles auswählen

Procedure _zeigeGadget(dummy)
  WebGadget(10, 0, 0, 1000, 600, "www.google.de")
  ;TextGadget(2,10,10,100,20,"Text")
  Repeat
    Delay(1000)
  ForEver
EndProcedure

OpenWindow(0,0,0,1000,600,"Window",#PB_Window_ScreenCentered)

CreateThread(@_zeigeGadget(),0)

Repeat
 Select WaitWindowEvent(1) 
     Case #PB_Event_CloseWindow    
      End 
 EndSelect

ForEver
Kann mir da jemand helfen?
Danke!

Re: WebGadget-Prozedur als Thread - wie?

Verfasst: 04.08.2022 11:01
von NicTheQuick
Du kannst keine einzelnen Gadgets in einem Thread laufen lassen. Gadgets müssen außerdem immer alle im Hauptprogramm erzeugt und geändert werden. Wichtig ist nur, dass irgendwo im Hauptprogramm ein (Wait)WindowEvent() immer auf Events reagieren kann.

Dass es mit dem TextGadget() im Thread funktioniert, ist mehr oder weniger Zufall oder Glück.

Re: WebGadget-Prozedur als Thread - wie?

Verfasst: 04.08.2022 17:43
von stab
Stimmt, alle anderen Gadgets laufen auch nicht :D
Danke

Re: WebGadget-Prozedur als Thread - wie?

Verfasst: 04.08.2022 17:49
von NicTheQuick
Ich bin trotzdem neugierig, was du bezwecken wolltest. Ich meine, es lohnt sich ja nicht ein Gadget in einem Thread zu erzeugen und dort dann zu warten oder den Thread direkt wieder zu verlassen. Das Erstellen eines Gadgets geht ja innerhalb von Millisekunden und macht man in der Regel einmalig, das muss man ja nicht auslagern.
Oder was genau hattest du vor?

Re: WebGadget-Prozedur als Thread - wie?

Verfasst: 13.10.2022 11:37
von stab
Hallo NicTheQuick,

habe erst jetzt gesehen, dass noch eine Frage von Dir offen war. Sorry.

Ich erweitere gerade meine Software, die eine Art Infoboard realisiert. Läuft an ein paar Schulen.
Dort öffne ich bis zu 4 Fenster gleichzeitig und es arbeiten jede Menge Threads im Hintergrund. Konvertieren von PDF's, Fotos, Laufband etc.
Jetzt kommt auf Wunsch ein Webgadget dazu. http://forums.purebasic.com/german/view ... de#p362974
Habe festgestellt, dass zeitweise das Laden der Webseiten im Gadget ziemlich lange dauert, zumindest erstmalig, und wollte mit dem Thread verhindern, dass der Progammfluss unterbrochen wird.
Von daher das Webgadet im Thread laufen lassen. <)

Aber wie oben schon erwähnt lag es eher an den 28° in meinem Büro.
und das kam dann noch hinzu ...
Dass es mit dem TextGadget() im Thread funktioniert, ist mehr oder weniger Zufall oder Glück.
Das Fenster des Gadgets läuft natürlich als Thread.

Danke für das Interesse ...

Re: WebGadget-Prozedur als Thread - wie?

Verfasst: 15.10.2022 11:40
von juergenkulow

Code: Alles auswählen

RunProgram("/tmp/WebGadget.out") 

Code: Alles auswählen

OpenWindow(0,0,0,1000,600,"Window",#PB_Window_ScreenCentered)
WebGadget(10, 0, 0, 1000, 600, "http://www.google.de")
Repeat
 Select WaitWindowEvent(1) 
     Case #PB_Event_CloseWindow    
      End 
 EndSelect

ForEver

Re: WebGadget-Prozedur als Thread - wie?

Verfasst: 15.10.2022 15:06
von mk-soft
Das WebGadget ohne URL anlegen ("") und erst im EventLoop den URL setzen.
Der Inhalt wird im Hintergrund (Threaded Systemintern) geladen.