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 } } }
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); } }