예제 #1
0
        /// <summary>
        /// 阻塞启动
        /// </summary>
        /// <param name="ThreadFunc"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public bool ThreadStartWait(EventFunc2 ThreadFunc, int iMillisecondsTimeout = 0, params object[] data)
        {
            //等待
            bool bFlag;

            if (iMillisecondsTimeout > 0)
            {
                bFlag = m_ThreadSem.WaitOne(iMillisecondsTimeout);
            }
            else
            {
                bFlag = m_ThreadSem.WaitOne();
            }

            //获取空闲的线程序号
            int iIndex = GetFreeIndex();

            //为了保险起见,如果没有获得,则在此循环3次
            int iRetryCount = 3;

            while (iIndex < 0 && iRetryCount-- > 0)
            {
                Thread.Sleep(100);
                iIndex = GetFreeIndex();
            }

            //如果没有获取到则返回失败
            if (iIndex < 0)
            {
                return(false);
            }

            //启动线程
            m_ThreadArrary[iIndex] = Start(ThreadFuncWait, ThreadFunc, data);
            return(true);
        }