Exemple #1
0
        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++;
                }
            }
        }
Exemple #2
0
        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();
        }