Ejemplo n.º 1
0
        public void DaemonThreadStart()
        {
            while (true)
            {
                AsyncSocketUserToken[] userTokenArray = null;
                m_asyncSocketServer.AsyncSocketUserTokenList.CopyList(ref userTokenArray);
                for (int i = 0; i < userTokenArray.Length; i++)
                {
                    if (!m_thread.IsAlive)
                    {
                        break;
                    }
                    try
                    {
                        if ((DateTime.Now - userTokenArray[i].ActiveDateTime).TotalMilliseconds > m_asyncSocketServer.SocketTimeOutMS) //超时Socket断开
                        {
                            lock (userTokenArray[i])
                            {
                                m_asyncSocketServer.ServerLogic.CloseClientSocket(userTokenArray[i]);
                                m_asyncSocketServer.GCUserToken(userTokenArray[i]);
                            }
                        }
                    }
                    catch (Exception E)
                    {
                        Debug.WriteLog.Log(eLogLevel.ell_Error, E.StackTrace);
                    }
                }

                for (int i = 0; i < 60 * 100; i++) //每分钟检测一次
                {
                    //if (!m_thread.IsAlive)
                    //    break;
                    Thread.Sleep(10);
                }
            }
        }