/// <summary> /// 停止本服务,清理 /// </summary> protected override void OnStop() { //停止全部线程 LogInToEvent.WriteDebug("开始停止进程"); LogInToEvent.WriteDebug("停止线程池"); foreach (var t in pool) { t.Abort(); } LogInToEvent.WriteDebug("准备结束应用程序"); System.Diagnostics.Process.GetCurrentProcess().Kill(); }
private static void readFromConfigureFile() { setting = new DisableGetObjects.ApplicationSettings(); LogInToEvent.WriteDebug("读取配置文件"); setting.ReadFromConfigureFile(); string i = DisableGetObjects.Log.OverallLog.GetErr(); LogInToEvent.WriteDebug("读取配置文件完毕"); LogInToEvent.WriteDebug("记录信息 Info:" + DisableGetObjects.Log.OverallLog.GetLog()); LogInToEvent.WriteDebug("记录信息 Error:" + i); if (i.Trim().Length != 0) { LogInToEvent.WriteDebug("配置文件错误:\n" + i); throw new Exception("读取配置文件过程中出现问题,记录如下:\n" + i); } }
/// <summary> /// 初始化本程序 /// </summary> public void InitAndStart() { if ( settings.FlushTime == 0 || settings.ItemConfigWoods == null || settings.SwitchTypeItems == null ) { LogInToEvent.WriteDebug("没有初始化内容"); throw new Exception("没有初始化内容?"); } //列出待服务队列 LogInToEvent.WriteDebug("列出待服务队列"); turnItemIntoList(settings.ItemConfigWoods, ref servList); lock (lockServQueue) { servQueue = new Datastructs.PriorityQueue <Datastructs.Commands.ICommand>(); foreach (var t in servList) { // 约定为DEFAULT_LOW_PRI ,普通的为低优先级 servQueue.Enqueue(new Datastructs.Commands.SearchForDisable(t), DEFAULT_LOW_PRI); } } LogInToEvent.WriteDebug("列出待服务队列完成,共" + servList.Count + "项"); LogInToEvent.WriteDebug("开始初始化线程"); for (int c = 0; c < pool.Length; ++c) { pool[c] = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Scan_DecideIfNeedsScanAndDispatchScan)); pool[c].Start(c); } LogInToEvent.WriteDebug("初始化线程结束"); LogInToEvent.WriteDebug("初始化WEB访问线程"); itemThredOfWaitWeb = new System.Threading.Thread(new System.Threading.ThreadStart(Web_WaitWebConnection)); itemThredOfWaitWeb.Start(); LogInToEvent.WriteDebug("初始化WEB访问线程结束"); }
/// <summary> /// 如果需要的话,调度刷新。刷新线程调度项目 /// </summary> /// <param name="count">当前执行该函数的为第几个线程</param> void Scan_DecideIfNeedsScanAndDispatchScan(object count) { int currItemCount = (int)count; while (true) { try { LogInToEvent.WriteDebug("试图取得待操作对象"); Datastructs.Commands.ICommand nowUsingItem = null; lock (lockServQueue) { if (!servQueue.IsEmpty()) { nowUsingItem = servQueue.Dequeue(); } } if (nowUsingItem != null) { lock (lockservItem) { servItem[currItemCount] = nowUsingItem; } //执行操作 if (nowUsingItem.IfNeedExecution) { nowUsingItem.DoCommand(); } else { System.Threading.Thread.Sleep(1000); } if (nowUsingItem.IsImmuable) { lock (lockServQueue) { servQueue.Enqueue(nowUsingItem, DEFAULT_LOW_PRI); } } lock (lockservItem) { servItem[currItemCount] = null; } } else { //等着看看 lock (lockservItem) { servItem[currItemCount] = null; } LogInToEvent.WriteDebug("取得待操作对象失败,休眠100s"); System.Threading.Thread.Sleep(100000); } } catch (Exception e) { LogInToEvent.WriteError(e.ToString()); DisableGetObjects.Log.OverallLog.LogForErr(e.ToString()); } } }