BeginReceive // Thread läßt sich nicht schließen



  • Hallo,

    folgendes Problem:

    Ich habe über die Socket-Klasse eine Verbindung zu einem Server aufgebaut. Das Senden und Empfangen von Daten läuft auch gut. Der Empfang läuft asynchrone über die BeginReceive-Methode. Die aufzurufenden Methode sieht wie folgt aus:

    public: static void empfangenCallback(System::IAsyncResult^ iasr)		
    	{		
    		Ams_Rcp_Socket^ arSocket = (Ams_Rcp_Socket^)iasr->AsyncState;
    		if (arSocket->verbunden())
    		{
    			int bytes = arSocket->verbindung->EndReceive(iasr);
    			arSocket->asyncEmpfang = nullptr;
    			if (buffer != nullptr && bytes > 0)
    			{
    				Debug::WriteLine(System::Text::Encoding::UTF8->GetString(buffer));
    				array<Byte> ^ temp = gcnew array<Byte>(bytes);
    				Array::Copy(buffer, temp, bytes);
    				arSocket->queueCharging(temp);
    				buffer = gcnew array<Byte>(2048);
    				if (!arSocket->disposed)
    				{
    					arSocket->asyncEmpfang = arSocket->verbindung->BeginReceive(buffer, 0, 2048, SocketFlags::None, 
    								gcnew AsyncCallback(&Ams_Rcp_Socket::empfangenCallback), arSocket);
    				}
    			}
    			else
    			{
    				arSocket->connectionLost();
    				arSocket->verbindung->Close();
    			}
    		}
    		else
    		{
    			arSocket->connectionLost();			
    		}
    	}
    

    Nun möchte ich die Verbindung schließen und rufe die Shutdown-Methode und die Close-Mehtode auf. Die Verbindung wird auch geschlossen, aber der von BeginReceive erzeugt Thread bleibt bestehen. Was muss ich machen um dieses auch zu schließen.

    Vielen Dank im Voraus!

    Grüße



  • Wo wird hier ein Thread erzeugt? Und warum rufst Du "BeginReceive" in "empfangenCallback" auf?



  • Guten Morgen,

    der Thread wird erzeugt, sobald ich

    verbindung->BeginReceive(this->buffer, 0, 2048, SocketFlags::None,
    gcnew AsyncCallback(&Ams_Rcp_Socket::empfangenCallback), this);

    aufrufe. Zumindestens laut VS. Der erste aufruf erfolgt bei mir, sobald ich mich beim Server angemeldet habe. Das Funktioniert auch wunderbar.

    In der callback-Methdode ruf ich noch mal BeginRecive auf, damit ich nachdem ich die Empfangenen-Daten verarbeitet habe, die nächsten Daten empfangen kann. Auch dieses Funktioniert gut.

    Leider schaffe ich es bloss nicht, den durch BeginReceive erzeugten Thread zu beenden.

    Grüße


Anmelden zum Antworten