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