Exemple #1
0
        public void Abort()
        {
            m_ThreadRunning = false;

            if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
            {
                lock (m_threadLock)
                {
                    if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
                    {
                        m_Thread.Abort();
                        m_Thread      = null;
                        m_ThreadState = cGlobalParas.GatherThreadState.Aborted;
                    }
                    else
                    {
                        m_Thread = null;
                        if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                        {
                            m_ThreadState = cGlobalParas.GatherThreadState.Aborted;;
                        }
                    }
                }
            }
            else
            {
                m_Thread = null;
                if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                {
                    m_ThreadState = cGlobalParas.GatherThreadState.Aborted;;
                }
            }

            m_ThreadState = cGlobalParas.GatherThreadState.Aborted;
        }
Exemple #2
0
        /// <summary>
        /// 停止当前线程
        /// </summary>
        public void Stop()
        {
            //仅在子线程外调用
            //设置停止线程标志,线程停止只能等待一个地址采集完成后停止,不能
            //强行中断,否则会丢失数据

            ///注意:在此只是打了一个标记,线程并没有真正结束
            m_ThreadRunning = false;


            if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
            {
                lock (m_threadLock)
                {
                    //开始检测是否所有线程都以完成或退出
                    //bool isStop = false;

                    //while (!isStop)
                    //{
                    //    isStop = true;

                    //    if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
                    //        isStop = false;


                    //}

                    m_Thread = null;
                    if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                    {
                        m_ThreadState = cGlobalParas.GatherThreadState.Stopped;
                    }
                }
            }
            else
            {
                m_Thread = null;
                if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                {
                    m_ThreadState = cGlobalParas.GatherThreadState.Stopped;
                }
            }

            m_ThreadState = cGlobalParas.GatherThreadState.Stopped;
        }
Exemple #3
0
        /// <summary>
        /// 启动工作线程
        /// </summary>
        public void Start()
        {
            if (m_ThreadState != cGlobalParas.GatherThreadState.Started && !IsThreadAlive && !IsCompleted)
            {
                lock (m_threadLock)
                {
                    //设置线程运行标志,标识此线程运行
                    m_ThreadRunning = true;

                    m_Thread = new Thread(this.ThreadWorkInit);

                    //定义线程名称,用于调试使用
                    m_Thread.Name = m_TaskID.ToString() + "-" + m_TaskSplitData.BeginIndex.ToString();

                    m_Thread.Start();
                    m_ThreadState = cGlobalParas.GatherThreadState.Started;
                }
            }
        }
        ///�޸��˹��캯��
        public cGatherTaskSplit()
        {
            //m_TaskManage = TaskManage;
            //m_TaskID = TaskID;
            //m_gStartPos = StartPos;
            //m_gEndPos = EndPos;
            //m_SavePath = sPath;
            //m_Cookie = strCookie;
            //m_WebCode = webCode;
            //m_IsUrlEncode = IsUrlEncode;
            //m_UrlEncode = UrlEncode;
            m_TaskSplitData = new cTaskSplitData ();
            m_ThreadState = cGlobalParas.GatherThreadState.Stopped;

            //m_TaskType = TaskType;

            m_GatherData = new DataTable();
        }
        /// <summary>
        /// ֹͣ��ǰ�߳�
        /// </summary>
        public void Stop()
        {
            //�������߳������
            //����ֹͣ�̱߳�־���߳�ֹֻͣ�ܵȴ�һ����ַ�ɼ���ɺ�ֹͣ������
            //ǿ���жϣ�����ᶪʧ����

            ///ע�⣺�ڴ�ֻ�Ǵ���һ����ǣ��̲߳�û����������
            m_ThreadRunning = false;

            if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
            {
                lock (m_threadLock)
                {

                    //��ʼ����Ƿ������̶߳�����ɻ��˳�
                    //bool isStop = false;

                    //while (!isStop)
                    //{
                    //    isStop = true;

                    //    if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
                    //        isStop = false;

                    //}

                    m_Thread = null;
                    if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                    {
                        m_ThreadState = cGlobalParas.GatherThreadState.Stopped;
                    }
                }
            }
            else
            {

                m_Thread = null;
                if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                {
                    m_ThreadState = cGlobalParas.GatherThreadState.Stopped;
                }
            }

            m_ThreadState = cGlobalParas.GatherThreadState.Stopped;
        }
        /// <summary>
        /// ��������߳�
        /// </summary>
        public void Start()
        {
            if (m_ThreadState != cGlobalParas.GatherThreadState.Started && !IsThreadAlive && !IsCompleted)
            {
                lock (m_threadLock)
                {
                    //�����߳����б�־����ʶ���߳�����
                    m_ThreadRunning = true;

                    m_Thread = new Thread(this.ThreadWorkInit);

                    //�����߳�����,���ڵ���ʹ��
                    m_Thread.Name =m_TaskID.ToString() + "-" + m_TaskSplitData.BeginIndex.ToString ();

                    m_Thread.Start();
                    m_ThreadState = cGlobalParas.GatherThreadState.Started;
                }
            }
        }
        public void Abort()
        {
            m_ThreadRunning = false;

            if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
            {
                lock (m_threadLock)
                {
                    if (m_ThreadState == cGlobalParas.GatherThreadState.Started && IsThreadAlive)
                    {
                        m_Thread.Abort();
                        m_Thread = null;
                        m_ThreadState = cGlobalParas.GatherThreadState.Aborted;
                    }
                    else
                    {
                        m_Thread = null;
                        if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                        {
                            m_ThreadState = cGlobalParas.GatherThreadState.Aborted; ;
                        }
                    }
                }
            }
            else
            {
                m_Thread = null;
                if (m_ThreadState == cGlobalParas.GatherThreadState.Started)
                {
                    m_ThreadState = cGlobalParas.GatherThreadState.Aborted; ;
                }
            }

            m_ThreadState = cGlobalParas.GatherThreadState.Aborted;
        }
Exemple #8
0
        /// <summary>
        /// 采集任务
        /// </summary>
        private void ThreadWork()
        {
            //cGatherWeb gWeb = new cGatherWeb();

            //gWeb.CutFlag =m_TaskSplitData.CutFlag ;

            bool IsSucceed = false;

            for (int i = 0; i < m_TaskSplitData.Weblink.Count; i++)
            {
                if (m_ThreadRunning == true)
                {
                    switch (m_TaskSplitData.Weblink[i].IsGathered)
                    {
                    case (int)cGlobalParas.UrlGatherResult.UnGather:

                        e_Log(this, new cGatherTaskLogArgs(m_TaskID, ((int)cGlobalParas.LogType.Info).ToString() + "正在采集:" + m_TaskSplitData.Weblink[i].Weblink + "\n", this.IsErrorLog));

                        //判断此网址是否为导航网址,如果是导航网址则需要首先将需要采集的网址提取出来
                        //然后进行具体网址的采集
                        if (m_TaskSplitData.Weblink[i].IsNavigation == true)
                        {
                            IsSucceed = GatherNavigationUrl(m_TaskSplitData.Weblink[i].Weblink, m_TaskSplitData.Weblink[i].NavigRules, m_TaskSplitData.Weblink[i].IsNextpage, m_TaskSplitData.Weblink[i].NextPageRule);
                        }
                        else
                        {
                            IsSucceed = GatherSingleUrl(m_TaskSplitData.Weblink[i].Weblink, m_TaskSplitData.Weblink[i].IsNextpage, m_TaskSplitData.Weblink[i].NextPageRule);
                        }

                        //如果采集发生错误,则直接调用了onError进行错误处理
                        //但对于带有导航的网址,一次采集是针对多个网址,如果系统
                        //停止任务,对于多个网址的采集那就是采集事务未成功,既然不成功
                        //则不需要增加GatheredUrlCount及其他处理
                        if (IsSucceed == true)
                        {
                            //每采集完成一个Url,都需要修改当前CurIndex的值,表示系统正在运行,并
                            //最终确定此分解任务是否已经完成,并且表示此网址已经采集完成
                            m_TaskSplitData.CurIndex++;
                            e_GUrlCount(this, new cGatherUrlCountArgs(m_TaskID, cGlobalParas.UpdateUrlCountType.UrlCountAdd, 0));

                            m_TaskSplitData.Weblink[i].IsGathered = (int)cGlobalParas.UrlGatherResult.Succeed;

                            m_TaskSplitData.GatheredUrlCount++;
                        }
                        else
                        {
                            e_GUrlCount(this, new cGatherUrlCountArgs(m_TaskID, cGlobalParas.UpdateUrlCountType.ErrUrlCountAdd, 0));
                        }

                        break;

                    case (int)cGlobalParas.UrlGatherResult.Succeed:
                        m_TaskSplitData.CurIndex++;
                        m_TaskSplitData.GatheredUrlCount++;
                        m_TaskSplitData.GatheredTrueUrlCount++;
                        e_GUrlCount(this, new cGatherUrlCountArgs(m_TaskID, cGlobalParas.UpdateUrlCountType.UrlCountAdd, 0));
                        break;

                    case (int)cGlobalParas.UrlGatherResult.Error:
                        m_TaskSplitData.CurIndex++;
                        m_TaskSplitData.GatheredErrUrlCount++;
                        m_TaskSplitData.GatheredTrueErrUrlCount++;
                        e_GUrlCount(this, new cGatherUrlCountArgs(m_TaskID, cGlobalParas.UpdateUrlCountType.ErrUrlCountAdd, 0));
                        break;

                    case (int)cGlobalParas.UrlGatherResult.Gathered:
                        m_TaskSplitData.CurIndex++;
                        m_TaskSplitData.GatheredUrlCount++;
                        m_TaskSplitData.GatheredTrueUrlCount++;
                        e_GUrlCount(this, new cGatherUrlCountArgs(m_TaskID, cGlobalParas.UpdateUrlCountType.UrlCountAdd, 0));
                        break;
                    }
                }
                else if (m_ThreadRunning == false)
                {
                    //标示线程需要终止,退出for循环
                    break;
                }
            }


            //每采集完成一个网址需要判断当前线程是否已经结束
            //需要判断已采集的网址和采集发生错误的网址
            if (UrlCount == GatheredUrlCount + GatherErrUrlCount && UrlCount != GatherErrUrlCount)
            {
                ThreadState = cGlobalParas.GatherThreadState.Completed;
            }
            else if (UrlCount == GatherErrUrlCount)
            {
                //表示采集失败,但对于一个任务而言,一个线程的完全失败并不代表
                //任务也采集完全失败,所以任务的安全失败需要到任务采集类中判断
                //所以,在此还是返回线程任务完成时间,不是失败时间。
                ThreadState = cGlobalParas.GatherThreadState.Completed;
            }
            else if (UrlCount < GatheredUrlCount + GatherErrUrlCount)
            {
                ThreadState = cGlobalParas.GatherThreadState.Completed;
            }
            else
            {
                ThreadState = cGlobalParas.GatherThreadState.Stopped;
            }

            m_ThreadRunning = false;
        }