wie kann ich einen Thread testen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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)
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
mk-soft
Beiträge: 3871
Registriert: 24.11.2004 13:12
Wohnort: Germany

Thread und meherer Variablen

Beitrag 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 :) :) :)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

@Justy: Strings sind problematisch. Auch bei dir. Hab jetzt nur keine Lust, dir ein Beispiel zu proggen.
Antworten