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