Zum Inhalt springen

Object in eigenen Typ umwandeln c++


Empfohlene Beiträge

Geschrieben

Hallo allerseits,

ich hab mal ne Frage und zwar:

Habe ich einen Thread dem ich einen Parameter übergebe:

Datei:Klassen.h


using namespace System;

using namespace System::Collections::Generic;

using namespace System::Threading;

#pragma once


public ref class client

{

public:

	Int32 id;

	Int32 loc_x;

	Int32 loc_y;

	bool used;

	List<String^>^ commands;


	client(Int32 index);



};

public ref class request

{

public:

	Int32 dest_x;

	Int32 dest_y;

	Int32 start_x;

	Int32 start_y;

	Int32 client_index;



	request(Int32 s_x, Int32 s_y, Int32 d_x, Int32 d_y);



};


public ref class server

{

public:

Int32 clientamount;

bool btmr;

List<client^>^clients;


List<request^>^requests;



ThreadStart^ThreadDelegateTmr; 

ParameterizedThreadStart^ThreadDelegateThr;//  <------------Um diesen Thread geht es

List<Thread^>^Thr;

Thread^Tmr;


server();

void start();

void stop();

void get_best_client(request^r);

void manage_requests();

void handle_request(Object^o);

void calculate_route(request^r);

};






#pragma endregion

Hier noch die passende server.cpp

using namespace System;

using namespace System::Collections::Generic;

#include "stdafx.h"

#include "Klassen.h"


server::server()

{


	clientamount=2;

	requests=gcnew List<request^>(0);

	clients=gcnew List<client^>(clientamount);

	for(int loop=0;loop<2;++loop)

	{

		clients->Add(gcnew client(loop));

	}


	btmr=false;

	ThreadDelegateTmr=gcnew ThreadStart(this, &server::manage_requests);

	ThreadDelegateThr=gcnew ParameterizedThreadStart(this, &server::handle_request);//<---Hier ist mein Thread

	Thr=gcnew List<Thread^>(0);

}

void server::start()

{

	// Thread manage_requests starten

	btmr=true;

	Tmr=gcnew Thread(ThreadDelegateTmr);

	Tmr->Start();

}

void server::stop()

{

	// Thread manage_requests stoppen

	btmr=false;

	Tmr->Join();

}

void server::calculate_route(request^r)

{

}

void server::get_best_client(request^r)

{

	int id=0;

	r->client_index=id;

}

//**********************************


void server::handle_request(Object^o)

{



	request^r=o;//<------------------------------Hier ist das Problem


	//Nächsten Client finden

	//server::get_best_client(o);

	//Route berechnen

	//server::calculate_route(o);



}

void server::manage_requests()

{

	bool free =false;

	while(btmr)

	{

		//Mindestens ein Request

		if(requests->Count>0)

		{		

			//Ist ein Client frei ?

			for(Int32 loop=0;loop<clientamount;++loop)

			{

				if(!clients[loop]->used)

				{

					free=true;

					loop=clientamount;

				}

			}



			//Es ist einer frei

			if(free)

			{

				Thr->Add(gcnew Thread(ThreadDelegateThr));

				Thr[Thr->Count-1]->Start(requests[0]);//<----Hier übergebe ich ihm den Parameter vom Typ request

				//server::handle_request(requests[0]);


			}


		}





	Thread::Sleep(100);

	}

}


Dieser Parameter darf aber nur vom Typ Object sein.

Das Problem taucht in der server::handle_request(Object^o) auf.

Wie kann ich in dieser Funktion aus dem Object wieder ein request machen?

Ich hoffe ich habe alle relevanten Dinge gesagt.

Vielen Dank für die Antworten

Lg

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...