Problem mit Thread



  • Hallo,

    ich versuche seit heute Morgen einen Thread zum Laufen zu bekommen. Der Code, den ich mir mit Suche aus Hilfe und Foren zusammengesucht habe ist:

    public ref class Work
    {
    public:
    void doWork()
    {
       //breakpoint
    }
    };
    
    void CameraProcessor::Live(C1394Camera *camera, char *window_name)
    {	
       Work^ w = gcnew Work;
       Thread^ trd = gcnew Thread(gcnew ThreadStart( w, &CameraProcessor::ThreadTask(void ThreadTask(*camera, *window_name)));
       trd->IsBackground = true;
       trd->Start();
    }
    

    Habe eine Liste von Fehlermeldungen auf eine reduziert. Diese lautet:

    error C3364: "System::Threading::ThreadStart": Ungültiges Argument für den Delegatkonstruktor. Delegatziel muss ein Zeiger auf eine Memberfunktion sein.
    

    Was mache ich falsch bzw. wo ist der Fehler begraben?

    Grüße, Matthias



  • Delegatziel muss ein Zeiger auf eine Memberfunktion sein

    Da stehts an sich doch. ThreadTask scheint es als Methode in Deiner Klasse nicht zu geben ?!



  • hmmm... da hab ich wohl nicht aufgepasst!

    Jetzt ist es aber auf jeden Fall der Richtige...

    Thread^ trd = gcnew Thread( gcnew ThreadStart( w, &Work::doWork(camera, window_name)));
    

    Trotzdem sind noch 2 Fehler aufgetaucht...

    error C2352: 'Work::doWork': Unzulässiger Aufruf einer nicht statischen Memberfunktion
    error C3350: "System::Threading::ThreadStart": Ein Delegatkonstruktor erwartet 2 Argument(e).
    

    Funktioniert die Parameterübergabe wie bei den Funktionen?

    Danke, Matthias



  • Thread^ trd = gcnew Thread( gcnew ThreadStart( w, &Work::doWork));
    

    1. Nur Function Pointer interessiert, nicht Funktionsaufruf doWork(...)
    Dabei muss doWork() Parameterlos sein!

    Siehe ThreadStart Delegate.

    Wenn Du Parameter übergeben musst, mach das über Member Variablen oder den ParameterizedThreadStart Delegaten.

    Gruss Simon


Anmelden zum Antworten