Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        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); }
            }
        }