Example #1
0
        /// 将方法排入队列以便执行
        public void QueueUserWorkItem(WaitCallback waitCallback, object args, int timeOut)
        {
            DateTime beginTime = DateTime.Now;

            // 锁住共享资源,实现线程安全
            lock ( workThreads )
            {
                try
                {
                    do
                    {
                        WorkThread workThread = GetAvailableWorkThread();

                        if (workThread != null)
                        {
                            workThread.Start(waitCallback, args);
                            return;
                        }

                        // 通知所有的等待线程对象状态的更改
                        Monitor.PulseAll(this.workThreads);
                        Thread.Sleep(500);
                    }while (((TimeSpan)(DateTime.Now - beginTime)).Milliseconds < timeOut);
                }
                catch (SynchronizationLockException)
                {}
                finally
                {
                    Monitor.Exit(this.workThreads);
                }
            }
        }
Example #2
0
        /// 构造函数
        public WorkThreadPool(int size)
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            this.size        = size;
            this.workThreads = new WorkThread[this.size];

            for (int i = 0; i < this.size; i++)
            {
                workThreads[i] = new WorkThread();
            }
        }
Example #3
0
        /// 获取有效的线程
        private WorkThread GetAvailableWorkThread()
        {
            for (int i = 0; i < workThreads.Length; i++)
            {
                WorkThread workThread = workThreads[i];

                if (workThread.IsAvailable)
                {
                    return(workThread);
                }
            }

            return(null);
        }