/// <summary> /// 计算延迟的线程 /// </summary> private void ThreadCalDelay() { DateTime dt = DateTime.Now; int time = 0; while (true) { if (DateTime.Now.Second % 3 == 0 && dt.Second != DateTime.Now.Second) { Int32 len1 = Queue_Operation_Data.GetQueueNumber(); Int32 len2 = Queue_Operation_Data_2.GetQueueNumber(); GlobalErrorLog.LogInstance.LogEvent("队列空间:\r\n" + "Queue_Operation_Data:" + len1.ToString() + "\r\nQueue_Operation_Data_2:" + len2.ToString()); dt = DateTime.Now; } if (Queue_Cal_Market.GetQueueNumber() > 0) { lock (Queue_Cal_Market.SyncLock) { object obj = Queue_Cal_Market.GetQueue().Dequeue(); time = Convert.ToInt32(obj); } } else { continue; } MarketDelayCalculation.cal(time); } }
private void TreadProc2() { //发现行情有变动,更新本地股市 DateTime lastmessage = DateTime.Now; while (true) { Thread.Sleep(1); if (DateTime.Now.Second != lastmessage.Second) { KeyValuePair <string, object> message = new KeyValuePair <string, object>("THREAD_MARKET_2", (object)false); queue_system_status.GetQueue().Enqueue((object)message); lastmessage = DateTime.Now; //更新本地行情列表,每秒一次 updateNewSubscribeList(); 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; } MarketData info = null; lock (Queue_Operation_Data.GetQueue()) { if (Queue_Operation_Data.GetQueueNumber() > 0) { info = (MarketData)Queue_Operation_Data.GetQueue().Dequeue(); } } if (info == null) { continue; } string key = info.Code; if (key.Contains(".")) { key = key.Split('.')[0]; } lock (MarketPrice.market) { if (MarketPrice.market.ContainsKey(info.Code)) { MarketPrice.market[info.Code] = info.Match; } else { MarketPrice.market.Add(info.Code, info.Match); } } if (DateTime.Now.Second % 2 == 0) { lock (Queue_Cal_Market.SyncLock) { Queue_Cal_Market.GetQueue().Enqueue((object)info.Time); } } lock (Queue_Operation_Data_2.SyncLock) { Queue_Operation_Data_2.GetQueue().Enqueue((object)info); } } }