/// <summary> /// 调用CTP接口 /// </summary> /// <param name="task"></param> /// <returns></returns> protected int InvokeAPI(CTPTaskBase <TRequestAction> task) { int result = -1; try { result = InvokeAPI(this._instance, ConvertActionToInt(task.Action), task.Parameter, task.RequestID); } catch (Exception ex) { throw ex; } return(result); }
/// <summary> /// 追加查询任务 /// </summary> /// <param name="para"></param> /// <param name="action"></param> protected void AddQueryTask(object para, TRequestAction action) { CTPTaskBase <TRequestAction> task = new CTPTaskBase <TRequestAction>(); task.Action = action; task.Parameter = para; lock (this.queryTasks) { this.queryTasks.Enqueue(task); } //立刻启动处理 this.queryTaskTimer.Change(0, QueryTaskProcessPeriod); }
/// <summary> /// 处理查询任务 /// (20090918API中,对查询函数增加了时间限制,每秒钟只能查询一次) /// </summary> protected void ProcessQueryTask(object obj) { lock (this.queryTasks) { if (this.isDispose == true) { this.queryTasks.Clear(); } else if (this.queryTasks.Count > 0) { //取得队列首位的任务 CTPTaskBase <TRequestAction> task = this.queryTasks.Peek(); task.RequestID = this.CreateRequestID(); int result = InvokeAPI(task); //请求发送成功,则移除队列 if (result == 0) { this.queryTasks.Dequeue(); if (processedTasks.ContainsKey(task.RequestID) == false) { processedTasks.Add(task.RequestID, task); } } } //没有要处理的任务,则关闭计时器 if (this.queryTasks.Count == 0) { this.queryTaskTimer.Change(Timeout.Infinite, Timeout.Infinite); return; } } }