Ejemplo n.º 1
0
        private void btn_start_Click(object sender, EventArgs e)
        {
            try
            {
                if ("".Equals(tb_searchKey.Text.Trim()))
                {
                    XtraMessageBox.Show("请输入搜索引擎检索关键字!");
                    return;
                }

                btn_start.Enabled = false;

                if (workItemsGroup == null)
                {
                    workItemsGroup = ThreadPoolEx.getWorkItemsGroup(5);

                    workItemsGroup.OnIdle += new WorkItemsGroupIdleHandler(delegate(IWorkItemsGroup target)
                    {
                        foreach (String url in engineList[0].AllUrlMap.Values)
                        {
                            parseService.add(url, Main.type);
                        }

                        XtraMessageBox.Show("搜索引擎共抓取出" + engineList[0].AllUrlMap.Count + "个站点提交分析");

                        engineList[0].AllUrlMap.Clear();

                        this.Close();
                    });
                }

                foreach (EngineEntity engine in engineList)
                {
                    if (engine.Selected && "未处理".Equals(engine.Status))
                    {
                        Hashtable param = new Hashtable();
                        param.Add("engine", engine);
                        param.Add("searchKey", tb_searchKey.Text.Trim());

                        engine.Status = "等待处理";

                        ThreadPoolEx.add(workItemsGroup, new WorkItemCallback(EngineService.search), param, WorkItemPriority.Normal);
                    }
                }
            }
            catch { }
            finally { btn_start.Enabled = true; }
        }
Ejemplo n.º 2
0
        public void add(String url, String type)
        {
            url = url.Replace("\r\n", "").Replace(Environment.NewLine, "").Trim();

            RuntimeEntity runtime = runtimeService.get(url);

            if (runtime == null)
            {
                runtime = runtimeService.add(url);
            }

            if (Constant.RunStatus.RUNING.Equals(runtime.RunStatus))
            {
                try
                {
                    if (get(url) == null)
                    {
                        runtime.WaitQueue.Add(url, new ParseEntity(url, type));

                        Hashtable param = new Hashtable();
                        param.Add("url", url);
                        param.Add("type", type);

                        lock (runtime.WorkItemsGroup)
                        {
                            ThreadPoolEx.add(runtime.WorkItemsGroup, new WorkItemCallback(ParseThread.run), param, runtime.Priority);
                        }
                    }
                }
                catch { }

                //等待解析数超过系统设定,则优先级降低
                if (!WorkItemPriority.Lowest.Equals(runtime.Priority) && (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count) > Convert.ToInt32(ConfigService.get("parse.lowParseCnt")))
                {
                    runtime.Priority = WorkItemPriority.Lowest;
                }

                //已解析数超过系统设定,则停止
                if (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count + runtime.ErrorQueue.Count >= Convert.ToInt32(ConfigService.get("parse.rule.maxParseCnt")))
                {
                    runtime.RunStatus = Constant.RunStatus.STOPING;
                }
            }
        }