using System; using System.Collections.Generic; using System.Threading; using ThinkingSDK.PC.Utils; using ThinkingSDK.PC.Request; using ThinkingSDK.PC.Constant; namespace ThinkingSDK.PC.TaskManager { public class ThinkingSDKTask { private System.Threading.Semaphore mSM = new Semaphore(1, 1); private readonly static object _locker = new object(); private List requestList = new List(); private List responseHandleList = new List(); private List>> dataList = new List>>(); static Queue _threadQueue = new Queue(); //队列 static EventWaitHandle _waitHandle = new AutoResetEvent(false); //通知Work线程的信号 public ThinkingSDKTask() { Thread newThread = new Thread(() => { while (true) { if (requestList.Count > 0) { WaitOne(); StartRequestSendData(); } else { _waitHandle.WaitOne(); } } }); newThread.Start(); } /// /// 持有信号 /// public void WaitOne() { mSM.WaitOne(); } /// /// 释放信号 /// public void Release() { mSM.Release(); } public void SyncInvokeAllTask() { } public void StartRequest(ThinkingSDKBaseRequest mRequest, ResponseHandle responseHandle, IList> list) { lock(_locker) { requestList.Add(mRequest); responseHandleList.Add(responseHandle); dataList.Add(list); } _waitHandle.Set(); } private void StartRequestSendData() { if (requestList.Count > 0) { ThinkingSDKBaseRequest mRequest; ResponseHandle responseHandle; IList> list; lock(_locker) { mRequest = requestList[0]; responseHandle = responseHandleList[0]; list = dataList[0]; } if (mRequest != null) { mRequest.SendData(responseHandle, list); lock(_locker) { requestList.RemoveAt(0); responseHandleList.RemoveAt(0); dataList.RemoveAt(0); } } } } } }