Array von System::Threading Threads erstellen
-
Hallo zusammen,
ich möchte ein Array an Threads erstellen. Da ich CLI verwenden muss (aufgrund anderer System Einbindungen) kann ich leider nicht mit #include <thread> arbeiten.
Bis jetzt habe ich folgenden Code erstellt:
#include "stdafx.h" using namespace System; using namespace System::Threading; ref class Work { private: Work(){} public: static void DoWork() { Console::WriteLine(L"Hallo du"); } }; Thread^ *newThread = new Thread[20]; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); newThread[1] = gcnew Thread(gcnew ThreadStart(&Work::DoWork)); newThread[1]->Start(); Console::ReadLine; return 0; }
-
Und was ist jetzt Deine Frage bzw. Dein Problem?
-
Das folgende Definition:
Thread^ *newThread = new Thread[20];
nicht tut
-
Versuch es mal in der Art:
ref class Work { private: Work() {} public: static void DoWork() { Console::WriteLine(L"Hallo du"); } }; ref class Master { Master(void) { m_threadArray = gcnew array<System::Threading::Thread^>(20); for(size_t i = 0; i < 20; i++) { m_threadArray[i] = gcnew Thread(gcnew ThreadStart(&Work::DoWork)); } } private: array<System::Threading::Thread^> ^m_threadArray; }; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); Master ^master = gcnew Master(); Console::ReadLine; return 0; }
-
Ich glaube ich steh gerade auf dem Schlauch...
Kannst du mir bitte den Aufruf des Arrays in einer beliebigen Funktion "vorturnen"???
-
scjo1044 schrieb:
Ich glaube ich steh gerade auf dem Schlauch...
Kannst du mir bitte den Aufruf des Arrays in einer beliebigen Funktion "vorturnen"???
Verstehe nicht ganz was Du willst
Achte einfach darauf, dass Du Objekte, die unter der Kontrolle des CLR stehen (z.B. vom Typ**
System::Threading::Thread
**) nicht als globale Variablen definieren kannst.Als Member-Variable einer**
ref
**Klasse oder als lokale Variable geht aber...
-
DeathCubeK schrieb:
Achte einfach darauf, dass Du Objekte, die unter der Kontrolle des CLR stehen (z.B. vom Typ**
System::Threading::Thread
**) nicht als globale Variablen definieren kannst.Das Problem ist dass ich das Ding global bräuchte (müsste von mehreren Funktionen aus drauf zugreifen)
-
Dann implementiere diese Funktionen doch als Methoden einer**
ref
**Klasse, so dass Du aus den Methoden direkt auf die Member-Variablen der Klasse zugreifen kannst.ref class Master { Master(void) { m_threadArray = gcnew array<System::Threading::Thread^>(20); for(size_t i = 0; i < 20; i++) { m_threadArray[i] = gcnew Thread(gcnew ThreadStart(&Work::DoWork)); } } void Methode1(void) { /* ... */ } void Methode2(void) { /* ... */ } private: array<System::Threading::Thread^> ^m_threadArray; };
Entweder das, oder: Du legst das Array als lokale Variable in deiner**
main()
**Funktion an und übergibst es dann per Parameter an deine jeweilige Funktion.Globale Variablen sind generell eher zu vermeiden...
-
Oh man, da hätte ich jetzt wirklich auch selbst drauf kommen müssen ICh glaube für heute reicht es mit programmieren
Danke dir