/// <summary> /// Disconnect from SRV-1 Blackfin robot. /// </summary> /// /// <remarks><para>The method disconnects from SRV-1 robot making all other methods /// unavailable (except <see cref="Connect"/> method). In the case if user /// obtained instance of camera using <see cref="GetCamera"/> method, the video will /// be stopped automatically (and those <see cref="SRV1Camera"/> instances should be discarded). /// </para></remarks> /// public void Disconnect() { lock (sync) { if (thread != null) { // signal camera to stop if (camera != null) { camera.SignalToStop(); } // signal worker thread to stop stopEvent.Set(); requestIsAvailable.Set(); replyIsAvailable.Set(); // finilze the camera if (camera != null) { // wait for aroung 250 ms for (var i = 0; (i < 5) && (camera.IsRunning); i++) { System.Threading.Thread.Sleep(50); } // abort camera if it can not be stopped if (camera.IsRunning) { camera.Stop(); } camera = null; } // wait for aroung 1 s for (var i = 0; (i < 20) && (thread.Join(0) == false); i++) { System.Threading.Thread.Sleep(50); } // abort thread if it can not be stopped if (thread.Join(0) == false) { thread.Abort(); } thread = null; // release events stopEvent.Close(); stopEvent = null; requestIsAvailable.Close(); requestIsAvailable = null; replyIsAvailable.Close(); replyIsAvailable = null; } if (socket != null) { if (socket.Connected) { socket.Disconnect(false); } socket.Close(); socket = null; endPoint = null; } } }
/// <summary> /// Disconnect from SVS device. /// </summary> /// /// <remarks><para>The method disconnects from SVS board making all other methods /// unavailable (except <see cref="Connect"/> method). In the case if user /// obtained instance of left or right camera using <see cref="GetCamera"/> /// method, the video will be stopped automatically (and those <see cref="SRV1Camera"/> /// instances should be discarded). /// </para></remarks> /// public void Disconnect() { lock (sync1) { lock (sync2) { hostAddress = null; // signal cameras to stop if (leftCamera != null) { leftCamera.SignalToStop(); } if (rightCamera != null) { rightCamera.SignalToStop(); } // wait until cameras stop or abort them if (leftCamera != null) { // wait for aroung 250 ms for (var i = 0; (i < 5) && (leftCamera.IsRunning); i++) { System.Threading.Thread.Sleep(50); } // abort camera if it can not be stopped if (leftCamera.IsRunning) { leftCamera.Stop(); } leftCamera = null; } if (rightCamera != null) { // wait for aroung 250 ms for (var i = 0; (i < 5) && (rightCamera.IsRunning); i++) { System.Threading.Thread.Sleep(50); } // abort camera if it can not be stopped if (rightCamera.IsRunning) { rightCamera.Stop(); } rightCamera = null; } if (communicator1 != null) { communicator1.Disconnect(); communicator1 = null; } if (communicator2 != null) { communicator2.Disconnect(); communicator2 = null; } } } }