有一个爬虫程序,开启了10个下载线程和1一个扫描线程(用于解析文件,提取Url放入Url队列)。已知进程结束的状态时10个下载线程已经下载完毕,扫描线程扫描完毕,Url队列为空。我应该如何设计控制进程的结束呢?采用信号量?

解决方案 »

  1.   

    信号量是互斥的,你等待结束,就用waitformultiobjects
      

  2.   

    能具体说说怎么做吗?不是太理解。我本来是打算采用信号量进行计数的,创建11个信号量,如果某个线程停止,信号量减1,唤醒了就增1.如果信号量集为空了,那么久表示所以线程都停止工作了。不知道这样行不行?使用waitformultiobjects又是怎么做的?有相关的资料参考吗?
      

  3.   

    结束线程不是Thread.CurrentThread.Abort();吗
    本人菜鸟~各位勿喷
      

  4.   

    你在一个列表里保存所有Thread对象的引用。在程序退出之前轮流调用Thread的Join方法
      

  5.   

    可以搜索一下:http://www.google.com.hk/search?q=AutoResetEvent+ManualResetEvent&hl=zh-CN&safe=strict&prmd=ivns&source=lnt&tbs=lr:lang_1zh-CN|lang_1zh-TW&lr=lang_zh-CN|lang_zh-TW&sa=X&ei=LUrRTcPkDY26vQOSpcC4Cg&ved=0CAcQpwUoAQ
      

  6.   

    其实关键问题是,我的下载线程和扫描线程如何结束?只有当下载队列为空,所有线程都停止工作时,此时才判断程序正常结束。那么当我队列为空,但是扫描线程还在工作时,我的下载线程应该怎么做?Sleep?但是Sleep完之后线程还是没有退出啊。而我又不能此时将下载线程终结掉,因为可能还会扫描出Url来。
      

  7.   


    public void WaitBegin()
    {
    Monitor.Enter(this);
    while ( !m_started ) 
    {
    Monitor.Wait(this);
    }
    Monitor.Exit(this);
    }这段代码是什么意思?