Seite 2 von 2
Verfasst: 27.09.2007 16:15
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
Verfasst: 27.09.2007 16:32
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
Verfasst: 27.09.2007 16:52
von jpd
ja,
das ist so ziemlich nah an das was ich mir vorgestellt habe.
was mich wunschlos glücklich machen würde ist:
"sec"
für jeden thread anders zu setzen.
Danke!
jpd
Verfasst: 27.09.2007 17:38
von NicTheQuick
Nichts leichter als das.
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)
Verfasst: 27.09.2007 17:48
von jpd

,
um das zu bearbeiten muss ich aber frish sein!
jpd
Verfasst: 27.09.2007 18:55
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...

Verfasst: 27.09.2007 18:59
von Kaeru Gaman
du kannst aber nur nach welchen suchen, die mit ProcedureDLL deklariert sind...
Verfasst: 27.09.2007 23:55
von jpd
Hi NicTheQuick,
funktioniert wie ne eins
habe das in meinen tool implementiert und ist einfach genial!
Danke
jpd
Verfasst: 28.09.2007 01:31
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.