/// <summary>
            /// Определить нове значение для состояния
            /// </summary>
            /// <param name="mode">Режим работы группы сигналов</param>
            /// <param name="prevState">Предыдущее значение состояния</param>
            /// <returns>Новое состояние</returns>
            public static STATE NewState(uLoaderCommon.MODE_WORK mode,STATE prevState)
            {
                GroupSignals.STATE stateRes = GroupSignals.STATE.UNKNOWN;
                //Проверить режим работы
                if (mode == uLoaderCommon.MODE_WORK.CUR_INTERVAL)
                {
                    // для режима "текущий интервал"
                    switch (prevState)
                    {
                    case STATE.ACTIVE:
                    case STATE.UNKNOWN:
                        stateRes = GroupSignals.STATE.TIMER;
                        break;

                    default:
                        stateRes = GroupSignals.STATE.SLEEP;
                        break;
                    }
                }
                else
                if (mode == uLoaderCommon.MODE_WORK.COSTUMIZE)
                {
                    // для режима "выборочно"
                    stateRes = GroupSignals.STATE.SLEEP;
                }
                else
                if (mode == uLoaderCommon.MODE_WORK.ON_REQUEST)
                {
                    // для режима "по требованию"
                    stateRes = GroupSignals.STATE.SLEEP;
                }
                else
                {
                    //??? throw new Exception
                    ;
                }

                return(stateRes);
            }
        /// <summary>
        /// Старт группы сигналов с указанным идентификаторм
        /// </summary>
        /// <param name="id">Идентификатор группы сигналов</param>
        public void Start(int id)
        {
            Logging.Logg().Debug(@"HHandlerDbULoader::Start (ID=" + (_iPlugin as PlugInBase)._Id + @", key=" + id + @") - ...",Logging.INDEX_MESSAGE.NOT_SET);

            int iNeedStarted = -1;                                     //Признак необходимости запуска "родительского" объекта

            GroupSignals.STATE initState = GroupSignals.STATE.UNKNOWN; //Новое состояние группы сигналов при старте
            //Установить признак необходимости запуска "родительского" объекта
            try
            {
                iNeedStarted = IsStarted == false ? 1 : 0;
            }
            catch (Exception e)
            {
                Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,@"HHandlerDbULoader::Start (ID=" + (_iPlugin as PlugInBase)._Id + @", key=" + id + @") - ...");
            }
            //Новое состояние в зависимости от режима группы сигналов
            switch (m_dictGroupSignals[id].Mode)
            {
            case MODE_WORK.CUR_INTERVAL:
                initState = GroupSignals.STATE.TIMER;
                break;

            case MODE_WORK.COSTUMIZE:
            case MODE_WORK.ON_REQUEST:     // для состояния 'UNKNOWN' (для группы сигналов назначения)
                initState = GroupSignals.STATE.SLEEP;
                break;

            default:
                break;
            }
            //Изменить состояние
            lock (m_lockStateGroupSignals)
            {
                if ((!(m_dictGroupSignals == null)) &&
                    (m_dictGroupSignals.Keys.Contains(id) == true))
                {
                    m_dictGroupSignals[id].State = initState;
                }
                else
                {
                    iNeedStarted = -1;
                }
            }

            Logging.Logg().Debug(@"HHandlerDbULoader::Start (ID=" + (_iPlugin as PlugInBase)._Id + @", key=" + id + @") - iNeedStarted=" + iNeedStarted + @" ...",Logging.INDEX_MESSAGE.NOT_SET);
            //Подтвердить клиенту изменение состояние
            (_iPlugin as PlugInBase).DataAskedHost(new object[] { ID_DATA_ASKED_HOST.START,id });
            //Проврить признак необходимости запуска "родительского" объекта
            if (iNeedStarted == 1)
            {
                //Запустиь объект и все зависимые потоки
                Start();
                //Активировать объект
                Activate(true);
            }
            else
            {
                ;
            }
            //Регистрация источника дфнных и установка с ним соединения
            lock (m_lockStateGroupSignals)
            {
                register(id,0,m_connSett,string.Empty);
            }
        }
        /// <summary>
        /// Потоковая функция очереди обработки объектов с событиями
        /// </summary>
        private void fThreadQueue()
        {
            bool bRes = false;

            while (!(threadQueueIsWorking < 0))
            {
                bRes = false;

                //Проверить наличие объектов для обработки
                lock (m_lockQueue)
                {
                    bRes = QueueCount > 0;
                }

                if (bRes == false)
                {
                    //Ожидать когда появятся объекты для обработки
                    //bRes = m_semaQueue.WaitOne();
                    bRes = m_autoResetEvtQueue.WaitOne();
                }
                else
                {
                    ; //Начать обработку немедленно
                }
                while (true)
                {
                    lock (m_lockQueue)
                    {
                        if (QueueCount == 0)
                        {
                            //Прервать, если обработаны все объекты
                            break;
                        }
                        else
                        {
                            ;
                        }
                    }
                    //Получить объект очереди событий
                    m_IdGroupSignalsCurrent = m_queueIdGroupSignals.Peek();

                    State = GroupSignals.STATE.ACTIVE;

                    //Logging.Logg().Debug(@"HHandlerDbULoader::fThreadQueue () - начало обработки группы событий очереди (ID_PLUGIN=" + (_iPlugin as PlugInBase)._Id + @", ID_GSGNLS=" + m_IdGroupSignalsCurrent + @")", Logging.INDEX_MESSAGE.NOT_SET);

                    lock (m_lockState)
                    {
                        //Очистить все состояния
                        ClearStates();
                        //Добавить все состояния
                        addAllStates();
                    }

                    //Обработать все состояния
                    Run(@"HHandlerDbULoader::fThreadQueue ()");

                    //Ожидать обработки всех состояний
                    m_waitHandleState[(int)INDEX_WAITHANDLE_REASON.SUCCESS].WaitOne(System.Threading.Timeout.Infinite);

                    lock (m_lockQueue)
                    {
                        //Удалить объект очереди событий (обработанный)
                        m_queueIdGroupSignals.Dequeue();
                    }

                    GroupSignals.STATE newState = GroupSignals.NewState(Mode,State);

                    lock (m_lockStateGroupSignals)
                    {
                        State = newState;
                    }

                    ((PlugInBase)_iPlugin).DataAskedHost(getDataAskedHost());

                    //Logging.Logg().Debug(@"HHandlerDbULoader::fThreadQueue () - окончание обработки группы событий очереди (ID_PLUGIN=" + (_iPlugin as PlugInBase)._Id + @", ID_GSGNLS=" + m_IdGroupSignalsCurrent + @")", Logging.INDEX_MESSAGE.NOT_SET);

                    try
                    {
                        m_IdGroupSignalsCurrent = -1;
                    }
                    catch (Exception e)
                    {
                        Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,@"HHandlerDbULoader.fThreadQueue () - ...");
                    }
                }
            }
            //Освободить ресурс ядра ОС
            //??? "везде" 'true'
            if (bRes == true)
            {
                try
                {
                    //m_semaQueue.Release(1);
                    m_autoResetEvtQueue.Reset();
                }
                catch (Exception e)
                { //System.Threading.SemaphoreFullException
                    Logging.Logg().Exception(e,Logging.INDEX_MESSAGE.NOT_SET,"HHandlerDbULoader::fThreadQueue () - semaState.Release(1)");
                }
            }
            else
            {
                ;
            }
        }