Seite 2 von 2

Verfasst: 20.10.2004 21:16
von Danilo
Justy hat geschrieben:Ich hoffe allerdings, dass man in PB4 dann auch mehrere Parameter an einen Thread übergeben kann! <)
Das kannst Du auch jetzt schon, über Strukturen.

Code: Alles auswählen

Structure MeinThread
  arg1.l
  arg2.l
EndStructure

Procedure Thread(*p.MeinThread)
  ; do something
EndProcedure

thread1.MeinThread
thread1\arg1 = 1
thread1\arg2 = 2
CreateThread(@MeinThread(),thread1)

thread2.MeinThread
thread2\arg1 = 3
thread2\arg2 = 4
CreateThread(@MeinThread(),thread2)

Verfasst: 20.10.2004 21:37
von Falko
So aktualisiert der String fast von selbst aus der Zählvaribale vom Thread. Man darf leider nur das Fenster nicht bewegen, dann bleibt alles hängen. ????????????

Code: Alles auswählen

;Aktuellen Zähler aus dem aktiven Thread ermitteln
;Falko
Global *MemoryID
Procedure test(*MemoryID) 
 
    For i = 0 To 100000 
    Delay(100) 
     Debug "Test"+Str(i)
     String.s="Test"+Str(i)
     PokeS(*MemoryID,String) 
  Next 
EndProcedure 
*MemoryID = AllocateMemory(1000)
ThreadID=CreateThread(@test(),"EIP") 
If OpenWindow(0,0,0,305,140,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ScrollAreaGadget") And CreateGadgetList(WindowID(0)) 
     ScrollAreaGadget(1, 10, 10,290,120, 375, 155, 30) 
      ButtonGadget  (2, 10, 10,230, 30,"Button 1") 
      StringGadget  (3,60,60,230, 20,"Test: ") 
      CloseGadgetList() 
    Repeat 
        Select WindowEvent() 
        Case  #PB_Event_CloseWindow 
          End 
        Case #PB_Event_Repaint  
            Delay(1)
           SetGadgetText(3,PeekS(*MemoryID))
         EndSelect
  
    ForEver 
  EndIf
  KillThread(ThreadID)

Thread und meherer Variablen

Verfasst: 28.11.2004 22:41
von mk-soft
Hallo Jungs,

ihr sucht eine möglichkeit mehrere Variablen an einen Thread zu übergeben? Thread bei Purebasic sind einfache Thread und laufen im gleichen speicher wie das hauptprogramm. Übergibt doch einen pointer auf die Daten. Achtung!!! String sind NICHT Thread-Fest

Beispiel:

Code: Alles auswählen


Structure workdata
  command.l
  value1.l
  value2.l
  value3.l
EndStructure


Procedure workthread(*work.workdata)

  Repeat
    Debug *work\command
    Debug *work\value1
    Debug *work\value2
    Debug *work\value3
    Delay(2000)
  Until *work\command
  
  *work\command = 2
EndProcedure


Global daten.workdata

daten\value1 = 1
daten\value2 = 2
daten\value3 = 3

Debug "Start Thread"

id = CreateThread(@workthread(),@daten)

Delay(5000)

daten\value1 = 10
daten\value2 = 20
daten\value3 = 30

Delay(5000)

Debug "Thread beenden"

daten\command = 1

While daten\command <> 2: Delay(100): Wend

Debug "Thread beendet."

Viel spass bein ausprobieren :) :) :)

Verfasst: 28.11.2004 23:38
von NicTheQuick
@Justy: Strings sind problematisch. Auch bei dir. Hab jetzt nur keine Lust, dir ein Beispiel zu proggen.