private void ThreadProc() { //本地股市信息存入stockTable 中 StockInfoClient client = new StockInfoClient(); KeyValuePair <string, object> message1 = new KeyValuePair <string, object>("THREAD_MARKET", (object)true); queue_system_status.GetQueue().Enqueue((object)message1); DateTime lastmessage = DateTime.Now; MarketData info = new MarketData(); while (true) { if (DateTime.Now.Second != lastmessage.Second) { KeyValuePair <string, object> message3 = new KeyValuePair <string, object>("THREAD_MARKET", (object)false); queue_system_status.GetQueue().Enqueue((object)message3); lastmessage = DateTime.Now; Thread.Sleep(1); } if ((DateTime.Now - GlobalHeartBeat.GetGlobalTime()).TotalMinutes > 10) { log.LogEvent("本模块供血不足,线程即将死亡"); KeyValuePair <string, object> message = new KeyValuePair <string, object>("THREAD_MARKET", (object)false); queue_system_status.GetQueue().Enqueue((object)message); break; } int count = 0; while (count < 100) { try { info = client.DeQueueInfo(); } catch { break; } if (info == null) { break; } else { lock (Queue_Operation_Data.GetQueue()) { Queue_Operation_Data.GetQueue().Enqueue((object)info); } } count++; } } }
private void ThreadProc() { //本地股市信息存入stockTable 中 StockInfoClient client = new StockInfoClient(); KeyValuePair<string, object> message1 = new KeyValuePair<string, object>("THREAD_MARKET", (object)true); queue_system_status.GetQueue().Enqueue((object)message1); DateTime lastmessage = DateTime.Now; while (true) { //更新本地行情列表 updateNewSubscribeList(); //从行情应用获取新行情 Thread.Sleep(1); //线程的喘息时间 if (DateTime.Now.Second != lastmessage.Second) { KeyValuePair<string, object> message3 = new KeyValuePair<string, object>("THREAD_MARKET", (object)false); queue_system_status.GetQueue().Enqueue((object)message3); lastmessage = DateTime.Now; } if((DateTime.Now-GlobalHeartBeat.GetGlobalTime()).TotalMinutes > 15) { log.LogEvent("行情获取线程即将停止!"); KeyValuePair<string, object> message2 = new KeyValuePair<string, object>("THREAD_MARKET", (object)false); queue_system_status.GetQueue().Enqueue((object)message2); break; } MarketData info = new MarketData(); try { info = client.DeQueueInfo(); } catch(Exception ex) { log.LogEvent("未能成功返回; "+ ex.ToString()); continue; } if (info == null) continue; else { //发现行情有变动,更新本地股市 //注册hash键 MarketDelayCalculation.cal(info.Time); if (StockTable.ContainsKey(info.Code)) { StockTable.Remove(info.Code); } StockTable.Add(info.Code, info); //marketMonitorQueue.EnQueueNew(info.Code, (((decimal)info.Match)/1000).ToString()); marketMonitorQueue.EnQueueNew(info.Code, info.Time, info.Match, info.Status, info.HighLimited, info.LowLimited, info.PreClose, info.IOPV); if(!subscribeList.Keys.Contains(info.Code)) { subscribeList.Add(info.Code, new List<String>()); } if (subscribeList.Keys.Contains(info.Code)) { //如果没有实例订阅过该股票,就不用管了 List<String> _relatedStrategy = subscribeList[info.Code]; foreach (String strategy in _relatedStrategy) { if (refStrategyQueue.Keys.Contains(strategy)) { refStrategyQueue[strategy].Enqueue((object)info); } else { //如果发现策略实例包含工作列表,却不包含消息队列,则应该报错。 continue; } } } } } Thread.CurrentThread.Abort(); }