Esempio n. 1
0
		/// -----------------------------------------------------------------------------------
		/// <summary>
		/// Initializes a new instance of the <see cref="ParserScheduler"/> class.
		/// </summary>
		/// -----------------------------------------------------------------------------------
		public void Init(string server, string database, string LangProject)
		{
			DebugMsg("ParserScheduler constructor is being called");
			Trace.WriteLineIf(tracingSwitch.TraceInfo, "ParserScheduler(): CurrentThreadId = " + Win32.GetCurrentThreadId().ToString());

			m_server = server;
			m_database = database;
			m_LangProject = LangProject;
			m_paused = false;
			m_sqlConnection = new SqlConnection(GetConnectionString());
			m_sqlConnection.Open();

			SqlCommand command = m_sqlConnection.CreateCommand();
			command.CommandText = "select top 1 ParserParameters from MoMorphData";
			XmlDocument doc = new XmlDocument();
			doc.LoadXml(((string)command.ExecuteScalar()).Trim());

			XmlNode parserNode = doc.SelectSingleNode("/ParserParameters/ActiveParser");
			m_parser = parserNode == null ? "XAmple" : parserNode.InnerText;

			// could use reflection to create the correct parser worker, then this switch statement
			// would not need to be updated for each parser, probably not a big deal for now
			switch (m_parser)
			{
				case "XAmple":
					m_parserWorker = new XAmpleParserWorker(m_sqlConnection, m_database, m_LangProject,
						new TaskUpdateEventHandler(this.HandleTaskUpdate));
					break;

				case "HC":
					m_parserWorker = new HCParserWorker(m_sqlConnection, m_database, m_LangProject,
						new TaskUpdateEventHandler(this.HandleTaskUpdate));
					break;
			}

			m_lastGrammarUpdateStamp = new TimeStamp();
			m_fForceGrammarOrLexiconNeedsUpdatingCheck = false;

			m_StopEvent = new ManualResetEvent(false);
			m_PauseEvent = new ManualResetEvent(false);
			m_QueueEvent = new ManualResetEvent(false);
			m_TryAWordEvent = new ManualResetEvent(false);
			m_waitTime = new TimeSpan(0, 0, 1);

			m_lowQueue = new M3ParserWordformQueue();
			m_mediumQueue = new M3ParserWordformQueue();
			m_highQueue = new M3ParserWordformQueue();
			//			m_traceQueue = new M3ParserWordformQueue();

			m_consumerThread = new Thread(new ThreadStart(this.ConsumerThreadStart));
			m_consumerThread.Priority = ThreadPriority.BelowNormal;
			m_consumerThread.IsBackground = true; // Can't prevent owning app from terminating.
			m_consumerThread.Name = "Parser scheduler-worker";
			m_consumerThread.SetApartmentState(ApartmentState.STA); // do before starting - DH
			m_consumerThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
			m_consumerThread.Start();
			m_cref = 1;
		}
Esempio n. 2
0
		private void AddToQueue(int hvoWordform, M3ParserWordformQueue queue)
		{
			queue.EnqueueWordform(hvoWordform);
		}