Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Eine Sub die Element einer Type ist als Thread aufrufen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 07.10.2008, 15:23    Titel: Eine Sub die Element einer Type ist als Thread aufrufen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 07.10.2008, 16:48    Titel: Antworten mit Zitat

Nur mit Static. (Hidden this parameter, engl. FB Forum)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 07.10.2008, 16:53    Titel: Antworten mit Zitat

oder mit kleinem Umweg grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 07.10.2008, 19:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 07.10.2008, 20:20    Titel: Antworten mit Zitat

durchgeknallt ,
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 07.10.2008, 20:23    Titel: Antworten mit Zitat

Ich glaub er will einfach eine Art Timerthread für eine Instanz seines Objekts haben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 08.10.2008, 13:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 08.10.2008, 19:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 08.10.2008, 19:18    Titel: Antworten mit Zitat

Du hast den Thread gelesen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 09.10.2008, 06:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 09.10.2008, 15:24    Titel: Antworten mit Zitat

Hi,
den Trick von Cherry finde ich gut, auf "t As Foo Ptr" mit "t -> bar()" wäre ich nicht gekommen. zwinkern

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! cool
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.10.2008, 21:10    Titel: Antworten mit Zitat

Hm.. ja gar nicht so übel die lösung lächeln werd ich im detail mal ausprobieren zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz