/// <summary>
        /// Thread de despacho final das mensagems
        /// </summary>
        private void mainOutboundProc()
        {
            logger.Info("Iniciando thread de despacho final");

            long lastLog = 0;

            while (_bKeepRunning)
            {
                try
                {
                    if (currentFeed < 0)
                    {
                        Thread.Sleep(250);
                        continue;
                    }

                    QuickFix.FIX44.Message message = null;
                    if (mainOutboundQ.TryDequeue(out message))
                    {
                        int    msgSeqNum = message.Header.GetInt(QuickFix.Fields.Tags.MsgSeqNum);
                        string msgType   = message.Header.GetString(QuickFix.Fields.Tags.MsgType);

                        logger.Debug("Dispatching Message [" + message.Header.GetInt(QuickFix.Fields.Tags.MsgSeqNum) + "] type [" + message.Header.GetString(QuickFix.Fields.Tags.MsgType) + "]");

                        if (UnderFIXMessageFire != null)
                        {
                            FIXMachineGunEventEventArgs args = new FIXMachineGunEventEventArgs();
                            args.Message = message;

                            UnderFIXMessageFire(this, args);
                        }

                        if (MDSUtils.shouldLog(lastLog))
                        {
                            logger.InfoFormat("Mensagens FIX na fila mainOutboundQ: {0}", mainOutboundQ.Count);
                            lastLog = DateTime.UtcNow.Ticks;
                        }

                        continue;
                    }

                    Thread.Sleep(25);
                }
                catch (Exception ex)
                {
                    logger.Error("mainOutboundProc: " + ex.Message, ex);
                }
            }

            logger.Info("Fim da thread mainOutboundProc");
        }
 void machineGun_UnderFIXMessageFire(object sender, FIXMachineGunEventEventArgs args)
 {
     enqueueToProcess(args.Message);
 }