SignalToStop() public method

Signal video source to stop its work.
Signals video source to stop its background thread, stop to provide new frames and free resources.
public SignalToStop ( ) : void
return void
Exemplo n.º 1
0
        /// <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;
                }
            }
        }
Exemplo n.º 2
0
        /// <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;
                    }
                }
            }
        }