Threads mit Methoden aus value class und class
-
Kann man Methoden als Threads starten, die aus einer value class oder einer class sind?
Ich habe es bisher geschaft eine statische Methode einer class als Thread zu starten, bei einer nichtstatischen Methode einer Instanz habe ich es bisher noch nicht geschafft.
-
Na, dann zeig doch mal was Du gemacht hast!
Oder noch einfacher: Schau Dir die Beispiele in der Hilfe an...
http://msdn2.microsoft.com/en-us/library/system.threading.threadstart.aspx
-
Warum es mit einer value class nicht geklappt hat, weiß ich mittlerweile. Ich habe
gcnew ThreadStart(&valClass, &ValueClass::run)
statt
gcnew ThreadStart(valClass, &ValueClass::run)
verwendet. Warum man aber nicht die Adresse braucht, ist mir ein Rätsel. Schließlich ist ein Handle auch eine Art managed Adresse.
So schaut mein Code insgesamt aus:
ref class RefClass { public: void run() { int i=0; while(1) { Console::WriteLine("Thread Ref: {0}", i); Thread::Sleep(100); i++; } } }; value class ValueClass { public: void run() { int i=0; while(1) { Console::WriteLine("Thread Value: {0}", i); Thread::Sleep(100); i++; } } }; class OldClass { public: void run() { int i=0; while(1) { Console::WriteLine("Thread Old: {0}", i); Thread::Sleep(100); i++; } } }; int main(array<System::String ^> ^args) { Console::WriteLine(L"Main Thread Start"); ValueClass valClass; OldClass oldClass; RefClass ^refClass = gcnew RefClass(); Thread ^th1 = gcnew Thread(gcnew ThreadStart(refClass, &RefClass::run)); Thread ^th2 = gcnew Thread(gcnew ThreadStart(valClass, &ValueClass::run)); //Thread ^th3 = gcnew Thread(gcnew ThreadStart(oldClass, &OldClass::run)); //Fehler th1->Start(); th2->Start(); //th3->Start(); return 0; }
-
Und wo ist jetzt die Frage? Hast Du das MS-Beispiel Dir mal angeschaut?
-
Das Beispiel habe ich mir angeschaut. Es startet allerdings nur eine statische und eine nicht statische Methode einer ref class.
Ich will aber eine nicht statische Methode einer alten C++ class als Thread starten. Ich will es nämlichen vermeiden einen Wrapper zu schreiben, der einen Pointer auf die alte Klasse als Membervariable enthält.
-
Jetzt verstehe ich endlich was Du willst... sorry... stand wohl etwas auf dem schlauch...
AFAIK geht das nicht... Du musst hier auch die "alte" WinAP-Funktion "CreateThread" verwenden...