private void CommandThreadProc(CancellationToken ct) { while (!ct.IsCancellationRequested)//(ExecFlag) { try { RequestContent cmd = _CmdQueue.Dequeue(); Util.Log("TradeApi CommandThreadProc: " + cmd.FunctionName + " dequeues."); MethodInfo serverMethod = DataContainer.GetUserInstance().GetType().GetMethod(cmd.FunctionName); serverMethod.Invoke(DataContainer.GetUserInstance(), cmd.Params.ToArray()); ReqTime = DateTime.Now; Sleeping(1024); // Windows 8,Windows 7 和 Windows Vista 的时钟频率,这是DateTime.Ticks, // Environment.TickCount 以及 WinAPI GetSystemTime 的标准频率,但 Task.Delay, // Thread.Sleep 或 WinAPI Sleep 的标准频率通常是 15.4 ~ 15.6 毫秒,有时也会超出这个范围 // 如果 OS 能够提供保证小于等于而不是大于等于所需延迟时间的API,就可以同时保证效率和精确度了 // 其实将 clockRate 设成 15 毫秒就非常精确了,并不需要一定设成 15.6001674109375 } catch (Exception ex) { Util.Log_Error("exception: " + ex.Message); Util.Log_Error("exception: " + ex.StackTrace); ct.ThrowIfCancellationRequested(); } } if (_CmdTask.IsCompleted) { _CmdTask.Dispose(); } else { Util.Log("CmdTask Status: " + _CmdTask.Status); } }
private void InstCtrlCallbackThread() { while (true) { NoReturnAndParamDelegate callbackFunction = _callbackQueue.Dequeue(); if (callbackFunction != null) { try { callbackFunction.Invoke(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message + " " + ex.StackTrace); } } } }