procedur als variable übergeben??

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi,
habe das jetzt so gelöst!

Code: Alles auswählen

Global sec.l=5
Procedure test1()
Debug 1
EndProcedure
Procedure test2()
Debug 2
EndProcedure
Procedure test3()
Debug 3
EndProcedure
Procedure Start(proc.l)
  
  Repeat
    If proc=1:   test1():   EndIf
    If proc=2:  test2(): EndIf 
    If proc=3:  test3():EndIf
    Datum.s=FormatDate("%dd/%mm/%yyyy "+ "%hh:%ii:%ss ", Date())
    Debug Datum
    ;100000
    Sleep_(sec*1000)
  ForEver
  
  EndProcedure
  
  CreateThread(@start(),1)
  CreateThread(@start(),2)
  CreateThread(@start(),3)
  
  Repeat
  ;hier ist eigentlich meine event schleife...
  ForEver 
@#NULL
bissher habe ich mich nie an macro dran gemacht...
werde mir irgendwann auch damit beschäftigen.

Ciao
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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 »

Ich würde es so machen:

Code: Alles auswählen

Prototype.l Proc()

Global sec.l = 5
Procedure test1()
  Debug 1
EndProcedure
Procedure test2()
  Debug 2
EndProcedure
Procedure test3()
  Debug 3
EndProcedure
Procedure Start(*proc.Proc)
  
  Repeat
    *proc()
    Datum.s = FormatDate("%dd/%mm/%yyyy "+ "%hh:%ii:%ss ", Date())
    Debug Datum
    ;100000
    Sleep_(sec * 1000)
  ForEver
  
EndProcedure
 
CreateThread(@Start(), @test1())
CreateThread(@Start(), @test2())
CreateThread(@Start(), @test3())
 
Repeat
  ;hier ist eigentlich meine event schleife...
ForEver 
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

ja,

das ist so ziemlich nah an das was ich mir vorgestellt habe. :allright:

was mich wunschlos glücklich machen würde ist:

"sec"

für jeden thread anders zu setzen.

Danke!

jpd
PB 5.10 Windows 7 x64
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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 »

Nichts leichter als das. :mrgreen:

Code: Alles auswählen

Prototype.l Proc()
Structure StartT
  sec.l
  proc.Proc
  Thread.l
EndStructure
Global NewList StartT.StartT()

Procedure test1()
  Debug 1
EndProcedure
Procedure test2()
  Debug 2
EndProcedure
Procedure test3()
  Debug 3
EndProcedure
Procedure Start(*StartT.StartT)
 
  Repeat
    *StartT\Proc()
    Datum.s = FormatDate("%dd/%mm/%yyyy "+ "%hh:%ii:%ss ", Date())
    Debug Datum
    Sleep_(*StartT\sec * 1000)
  ForEver
 
EndProcedure

Procedure CreateStart(*proc.Proc, sec.l)
  If AddElement(StartT())
    StartT()\sec = sec
    StartT()\proc = *proc
    StartT()\Thread = CreateThread(@Start(), @StartT())
    
    ProcedureReturn StartT()\Thread
  EndIf
  
  ProcedureReturn #False
EndProcedure

CreateStart(@test1(), 2)
CreateStart(@test2(), 3)
CreateStart(@test3(), 5)

Repeat
  ;hier ist eigentlich meine event schleife...
Until GetAsyncKeyState_(#VK_ESCAPE)
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

:shock: ,

um das zu bearbeiten muss ich aber frish sein! :freak:

jpd
PB 5.10 Windows 7 x64
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Zaphod hat geschrieben:Genau. Du musst bedenken, dass der Quellcode nach dem Compilieren nicht mehr da ist, die CPU also unmöglich wissen kann, wie welche Prozedur in deinem Quelltext hieß.
Warum kann man dann bei einer DLL nach ner Funktion mit nem bestimmten Namen suchen? DLLs sind doch auch im PE-Format... :?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du kannst aber nur nach welchen suchen, die mit ProcedureDLL deklariert sind...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hi NicTheQuick,

funktioniert wie ne eins :)

habe das in meinen tool implementiert und ist einfach genial! :allright:

Danke
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Exakt... DLLs haben sozusagen eine Tabelle für die Prozeduren, die die Schnittstelle zur DLL darstellen sollen. Der restliche Quelltext der Prozeduren ist aber nicht mehr da. Irgendwie kann man sowas glaube ich auch für Executables machen, aber da ist das mit dem Aufruf natürlich anders als bei reinen DLLs.
Antworten