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 🙄


Anmelden zum Antworten