<<valle>> Geschrieben 11. Oktober 2011 Geschrieben 11. Oktober 2011 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 Zitieren
Klotzkopp Geschrieben 11. Oktober 2011 Geschrieben 11. Oktober 2011 Wie kann ich in dieser Funktion aus dem Object wieder ein request machen?Durch eine explizite Typumwandlung, auf neudeutsch "Cast". Siehe Casting Operators. Zitieren
<<valle>> Geschrieben 12. Oktober 2011 Autor Geschrieben 12. Oktober 2011 Danke! Jetzt läufts. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.