Stop() public method

Stop video source.

Stops video source aborting its thread.

Since the method aborts background thread, its usage is highly not preferred and should be done only if there are no other options. The correct way of stopping camera is signaling it to stop and then waiting for background thread's completion.

public Stop ( ) : 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;
                    }
                }
            }
        }