Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 07.10.2008, 15:23 Titel: Eine Sub die Element einer Type ist als Thread aufrufen |
|
|
Folgender Quelltext vorrausgesetzt:
Code: |
dim shared threadsync as integer ptr
dim shared closethreads as ubyte
type test
enabled as ubyte
tmp as string
nochwas as string
declare sub running_in_type()
end type
sub test.running_in_type()
dim c as ubyte
do
mutexlock threadsync
c = closethreads
locate 1,1: print @this
mutexunlock threadsync
loop until c <> 0
end sub
dim shared r as test
sub running_alone()
dim c as ubyte
do
mutexlock threadsync
c = closethreads
locate 2,1: print @running_alone
mutexunlock threadsync
loop until c <> 0
end sub
dim a as integer ptr
dim b as integer ptr
threadsync = mutexcreate
a = threadcreate(@running_alone)
b = threadcreate(@r.running_in_type)
sleep
mutexlock threadsync
locate 3,1:print "Closing threads..."
closethreads = 1
mutexunlock threadsync
threadwait a
locate 4,1:print "Thread A closed"
threadwait b
locate 5,1:print "Thread b closed"
sleep
|
Will man das progrämchen kompilieren, beschwert sich der fbc in zeile 37
(37) error 18: Syntax error, found ')' in 'b = threadcreate(@r.running_in_type)'
Jetzt meine Frage: Gibt es eine Möglichkeit eine Sub die ein Element einer Type ist, als Thread aufzurufen? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.10.2008, 16:48 Titel: |
|
|
Nur mit Static. (Hidden this parameter, engl. FB Forum) |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 07.10.2008, 16:53 Titel: |
|
|
oder mit kleinem Umweg
Code: | Dim Shared threadsync As Integer Ptr
Dim Shared closethreads As UByte
Type Test
enabled As UByte
tmp As String
nochwas As String
Declare Sub running_in_type()
End Type
Sub Test.running_in_type()
Dim c As UByte
Do
MutexLock threadsync
c = closethreads
Locate 1,1: Print @THIS
MutexUnlock threadsync
Loop Until c <> 0
End Sub
Dim Shared rx As Test
Sub running_alone()
Dim c As UByte
Do
MutexLock threadsync
c = closethreads
Locate 2,1: Print @running_alone
MutexUnlock threadsync
Loop Until c <> 0
End Sub
Sub running_in_type()
rx.running_in_type
End Sub
Dim As Any Ptr a, b
threadsync = MutexCreate
a = ThreadCreate(Cast(Any Ptr,@running_alone))
b = ThreadCreate(Cast(Any Ptr,@running_in_type))
Sleep
MutexLock threadsync
Locate 3,1: Print "Closing threads..."
closethreads = 1
MutexUnlock threadsync
ThreadWait a
Locate 4,1: Print "Thread A closed"
ThreadWait b
Locate 5,1: Print "Thread b closed"
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 07.10.2008, 19:54 Titel: |
|
|
Naja... meine idee war halt, das ich eine komplexe type entwickel, die sich selbst als thread am laufen hält.
Es soll eine Prozedur per Constructor aufgerufen werden, die bis ein bestimmtes signal erscheint, zugriff auf alle elemente der type hat (sowohl public als auch private). Und an die private-elemente kommt man per Static-Sub nicht ran, selbst wenn ich den pointer auf die instanz an eine Sub weitergebe...
Dieses Type konstrukt soll möglichst alleine laufen können. Ohne zusätzliche externe Subs. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 07.10.2008, 20:20 Titel: |
|
|
Hä ,
ich verstehe nicht was es bringen soll Type-Elemente erst privat zu setzen und dann mit Trick17 versuchen diesen Schutz zu umgehen?
Kommt mir irgendwie vor als suchst du "einen Nachschlüssel für eine Tür die kein Schloß hat". _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.10.2008, 20:23 Titel: |
|
|
Ich glaub er will einfach eine Art Timerthread für eine Instanz seines Objekts haben... |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 08.10.2008, 13:54 Titel: |
|
|
Ja genau! Für einen Timer z.B. könnte man das auch gebrauchen!
Ich weiss die Thematik OOP in FB ist noch nicht sehr weit.. aber in die richtung ginge es.
Das "Objekt" (wenn ich diese Type mal so nennen darf) soll selbstständig während des aktiv ist änderungen an seinen Elementen bemerken und seine internen Berechnungen daraufhin ändern.
Ein (otto) Motor fängt ja auch nicht erst an zu laufen wenn man aufs gas tritt.. er wird aktiviert und regelt aufgrund der gas-pedal-stellung seine drehzahl. (grob gesehen). |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 08.10.2008, 19:17 Titel: |
|
|
Code: | Type Foo
Declare Static Sub helper(t As Foo Ptr)
Declare Sub bar()
Declare Constructor()
the_thread As Any Ptr
Private:
x As Integer = 42
End Type
Sub Foo.helper(t As Foo Ptr)
t->bar()
End Sub
Sub Foo.bar()
Print "x = " & x
Sleep
End Sub
Constructor Foo()
the_thread = ThreadCreate(@Foo.helper, @This)
End Constructor
Dim test As Foo
ThreadWait(test.the_thread)
End |
|
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 08.10.2008, 19:18 Titel: |
|
|
Du hast den Thread gelesen? |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 09.10.2008, 06:38 Titel: |
|
|
Ja...?
Die tatsächliche Timer-Funktion ist ja wohl nicht schwer zu machen, das Beispiel zeigt ja nur, wie man quasi mit einer statischen Sub als Umweg im Thread auf die privaten Elemente zugreifen kann. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.10.2008, 15:24 Titel: |
|
|
Hi,
den Trick von Cherry finde ich gut, auf "t As Foo Ptr" mit "t -> bar()" wäre ich nicht gekommen.
Obwohl ich den Sinn einer solchen Aktion von OneCypher, trotz des hinkenden Vergleichs mit dem Motor, immer noch nicht einsehen kann.
Der Pointer Trick ist aber bestimmt noch in anderen Zusammenhängen interessant!  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.10.2008, 21:10 Titel: |
|
|
Hm.. ja gar nicht so übel die lösung werd ich im detail mal ausprobieren  |
|
Nach oben |
|
 |
|