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.