private void RunBlockThread(List <Block> BlockSet, ref List <ViterbiResult> ResultsOnBlocks, ref object mutex, ref int job_count, ref ManualResetEvent manual)
        {
            ViterbiResult viterbiResultFields = null;

            if (_runType != RunType.Meta)
            {
#if !_GENERAL_PARSE
                AnchorViterbi anchor_viterbi = new AnchorViterbi(RunType.GeneralParse, _filePath, new List <UserState>(_userStates));
                viterbiResultFields = anchor_viterbi.RunThreaded(BlockSet, ref _machines, ref _states, ref _startState, ref _userStates);
#else
                Viterbi viterbi = new Viterbi(_runType, false, ref _machines, ref _states, ref _startState, ref _userStates);
                viterbiResultFields = viterbi.Run(BlockSet, _filePath);
#endif
            }
            else
            {
                Viterbi viterbi = new Viterbi(RunType.Meta, false, ref _machines, ref _states, ref _startState, ref _userStates);
                viterbiResultFields = viterbi.Run(BlockSet, _filePath);
            }
            lock (mutex)
            {
                ResultsOnBlocks.Add(viterbiResultFields);
                job_count--;
                if (job_count == 0)
                {
                    manual.Set(); // signal that all threads are done
                }
            }
        }
示例#2
0
        private void RunBlockThread(List<Block> BlockSet, ref List<ViterbiResult> ResultsOnBlocks, ref object mutex, ref int job_count, ref ManualResetEvent manual)
        {
            ViterbiResult viterbiResultFields = null;
            if (_runType != RunType.Meta)
            {
#if !_GENERAL_PARSE
                AnchorViterbi anchor_viterbi = new AnchorViterbi(RunType.GeneralParse, _filePath, new List<UserState>(_userStates));
                viterbiResultFields = anchor_viterbi.RunThreaded(BlockSet, ref _machines, ref _states, ref _startState, ref _userStates);
#else
            Viterbi viterbi = new Viterbi(_runType, false, ref _machines, ref _states, ref _startState, ref _userStates);
            viterbiResultFields = viterbi.Run(BlockSet, _filePath);
#endif
            }
            else
            {
                Viterbi viterbi = new Viterbi(RunType.Meta, false, ref _machines, ref _states, ref _startState, ref _userStates);
                viterbiResultFields = viterbi.Run(BlockSet, _filePath);
            }
            lock (mutex)
            {
                ResultsOnBlocks.Add(viterbiResultFields);
                job_count--;
                if (job_count == 0)
                {
                    manual.Set(); // signal that all threads are done
                }
            }
        }
        public ViterbiResult RunViterbi(List<Block> unfilteredBlocks, RunType type)
        {
            if (type == RunType.AnchorPoints)
            {
                var viterbiAnchor = new AnchorViterbi(RunType.GeneralParse, _inputFile);

                return viterbiAnchor.Run(unfilteredBlocks);
            }
            else
            {
                var viterbi = new Viterbi.Viterbi(type, false);
                return viterbi.Run(unfilteredBlocks, _inputFile);
            }
        }