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);
     }
 }
Beispiel #2
0
 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);
             }
         }
     }
 }