Пример #1
0
 public static void StartThread(ThreadHandler handler, ThreadCallback callback, object arg)
 {
     // 考虑到对LinkedList的资源竞争,所以必须在主线程中调用
     if (!Engine.IsMainContext())
         throw new Exception("仅允许在主逻辑线程中调用此方法");
     if (handler == null)
         throw new ArgumentNullException("执行体不能为null");
     // 构建Job对象并进行排队,由于做了并发控制,所以必须要进行排队
     listTask.AddLast(new ThreadTask(handler, callback, arg));
 }
Пример #2
0
        public MyThreadPool(int numOfThreads, ThreadHandler initThread, ThreadHandler executeThread)
        {
            m_numOfThreads = numOfThreads;

            m_initThread = initThread;
            m_executeThread = executeThread;

            m_threads = new Thread[m_numOfThreads];
            m_threadExecInfos = new ThreadExecInfo[m_numOfThreads];
            m_eventsDone = new AutoResetEvent[m_numOfThreads];
        }
Пример #3
0
 public ThreadTask(ThreadHandler handler, ThreadCallback callback, object arg)
 {
     mHandler = handler;
     mCallback = callback;
     mArg = arg;
     mOutArg = null;
     mOutExp = null;
     // 自行构建线程,但不开始
     mThread = new Thread(new ParameterizedThreadStart(ThreadStart));
 }
Пример #4
0
 public static void StartThread(ThreadHandler handler, object arg)
 {
     StartThread(handler, null, arg);
 }
Пример #5
0
 // 完成,引发回调,将变量赋值为null
 public void Done()
 {
     if (mCallback != null && mOutExp == null)
     {
         mCallback(mOutArg);
     }
     if (mOutExp != null)
     {
         // 想办法自动抛出去
         Logger.LogException(mOutExp);
     }
     mThread = null;
     mHandler = null;
     mArg = null;
     mCallback = null;
     mOutArg = null;
     mOutExp = null;
 }
Пример #6
0
 internal void DoNonBlocking(ThreadHandler h)
 {
     Thread t = new Thread(new ThreadStart(h));
     DoNonBlocking(t);
 }
Пример #7
0
 internal void Do(ThreadHandler h)
 {
     Thread t = new Thread(new ThreadStart(h));
     Do(t);
 }
Пример #8
0
 internal void Enqueue(ThreadHandler h)
 {
     Enqueue(new Thread(new ThreadStart(h)));
 }