首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

线程没法终止,高手们进来看看

2012-12-15 
线程无法终止,高手们进来看看启用了个死循环来监听端口,可是在退出的时候用abort方法不能终止线程,下面是

线程无法终止,高手们进来看看
启用了个死循环来监听端口,可是在退出的时候用abort方法不能终止线程,下面是我的代码:
 public void Listen(int port)
        {
            try
            {
                isStopThread = false;
                UDP_Server_Port = port;
                UDP_Server = new UdpClient(port);
                thUdp = new Thread(new ThreadStart(GetUDPData));
                thUdp.Start();
            }
            catch(Exception e)
            {
                throw new Exception(e.Message);
            }
        }
private void GetUDPData()
        {
            
            while (!isStopThread)
            {
                try
                {
                    byte[] RData = UDP_Server.Receive(ref _Server);
                    if (DataArrival != null)
                    {
                        DataArrival(RData, _Server.Address, _Server.Port);
                    }
                    Thread.Sleep(0);

                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                    if (Sock_Error != null)
                    {
                        Sock_Error(e.Message);


                    }
                }
            }
        }
终止线程代码:
 while (thUdp.ThreadState != System.Threading.ThreadState.Stopped)
                {
                    //thUdp.Interrupt();
                    thUdp.Abort();
                    thUdp.Join();
                    //thUdp = null;
                }
                //thUdp.ThreadState = System.Threading.ThreadState.Stopped;
                
                UDP_Server.Close();

这里thUdp.ThreadState 的状态一直是AbortRequested  晕的不行  有没有强行终止线程的方法


小弟现在没有多少分了,等以后有了给大哥们补上,先谢了!
[解决办法]
up
[解决办法]
怎么没人来啊   自己顶一下
[解决办法]
先试试
UDP_Server.Blocking = false;
UDP_Server.Shutdown(SocketShutdown.Both);
UDP_Server.Close(); 
[解决办法]
你中奖了
[解决办法]
需要动用 Thread.Abort 这种威力强大但结果不可预测的武器么

把 isStopThread 赋为 true, 线程就自动结束啦
[解决办法]
你终止线程的判断条件有问题:
常用如下代码: myThread为活动的线程
 if (myThread != null && myThread.IsAlive == true)
   {
      myThread.Abort();
   }
[解决办法]
6楼的可以..回帖是一种美德!每天回帖即可获得 10 分可用分!
[解决办法]
该回复于2009-07-22 10:35:10被版主删除
[解决办法]



在while里面做判断
[解决办法]
private void GetUDPData()中的捕获改一下:
ThreadAbortException

try 

    ....

catch (ThreadAbortException)
{
    ....
}
finally
{
    ....
}

 

  
[解决办法]
你使用socket来监听串口数据吗

热点排行