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)); }
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]; }
public ThreadTask(ThreadHandler handler, ThreadCallback callback, object arg) { mHandler = handler; mCallback = callback; mArg = arg; mOutArg = null; mOutExp = null; // 自行构建线程,但不开始 mThread = new Thread(new ParameterizedThreadStart(ThreadStart)); }
public static void StartThread(ThreadHandler handler, object arg) { StartThread(handler, null, arg); }
// 完成,引发回调,将变量赋值为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; }
internal void DoNonBlocking(ThreadHandler h) { Thread t = new Thread(new ThreadStart(h)); DoNonBlocking(t); }
internal void Do(ThreadHandler h) { Thread t = new Thread(new ThreadStart(h)); Do(t); }
internal void Enqueue(ThreadHandler h) { Enqueue(new Thread(new ThreadStart(h))); }