CreateThread & Methoden



  • hi,
    wie kann ich Threads erstellen die Methoden einer klasse aufrufen? Ich habe es zwar schon geschaft globale Funktionen in Thread auf zu rufen, doch leider gelingt mir das nicht mit Methoden die einer Klasse angehören. Bitte um eure Mithilfe 😋

    mfg LordPsycho



  • Was hast du bisher versucht/was funktioniert nicht?



  • Hi,

    ich gaub im Exampels-Ordner des BCBs ist ein Beispiel, in dem TThread verwendet wird. Vielelicht hilft dir das weiter. Ansonsten muss du deine Frage wohl etwas konkretisieren.



  • Also,
    wenn ich versuche die Methode so auf zu rufen:

    hThread2 = CreateThread(0,0,(LPTHREAD_START_ROUTINE)TForm1::KlassenM1,NULL,NULL,&hThreadId2);
    

    dann gibts diese fehlermeldung:

    [C++ Fehler] thU.cpp(33): E2235 Elementfunktion mu? aufgerufen oder ihre Adresse ubernommen werden

    das selbe ergebniss gibt es wenn ich es so versuche

    hThread2 = CreateThread(0,0,(LPTHREAD_START_ROUTINE)Form1->KlassenM1,NULL,NULL,&hThreadId2);
    hThread2 = CreateThread(0,0,(LPTHREAD_START_ROUTINE)KlassenM1,NULL,NULL,&hThreadId2);
    

    Es wird doch irgendwie möglich sein eine Methode auf zu rufen, oder muss es unbedingt eine Funktion sein? 😕



  • ähm,

    die API- Threadfunktionaitäten werden sehr gut in der Klasse TThread gekapselt. Das macht die Sache viel einfacher. Ich würde an deiner stelel die Hilfe des BCB zum Thema TThread konsultieren.



  • Danke für deine Antwort, konnte ja nicht wissen das der BBuilder ein ganzes Objekt dazu hat.



  • um aber auf deine Frage zu antworten:

    ein Thread ist eine asyncrone Funktion. Wenn die Funktion beendet wird, ist der Thread auch zu Ende.

    mit dieses:

    hThread2 = CreateThread(0,0,(LPTHREAD_START_ROUTINE)Form1->KlassenM1,NULL,NULL,&hThreadId2);
    

    Wir ein Thread erzeugt für die Fuktion KlassenM1 erzeugt. Wenn die Funktion beendet wird ist auch der Thread beendet.

    Die Asyncronität ist also die Funktion. Was du in der Funktion machst läuft dann parallel zum Hauptthread. Du musst also nur innerhalb dieser Funktion alle gewünschten aktivitäten durchführen.
    Voraussetzung dafür ist allerdings, dass keine gemeinsammen Resourcen benutzt werden. Wenn zum beipiel dein Thread mit Variablen arbeitet, die auch in anderen Threads benutzt werden kann (und wird) das zu bösen Fehlern führen. Sorge stets dafür das ein thread nicht auf Resourcen anderer Threads zugreift.



  • das ist mir klar,
    mein Problehm war es einfach eine Methode auf zu rufen die einer Klasse angehörte. Hab das jetzt mit dem TTHread Objekt gelöst


Anmelden zum Antworten