当前位置:编程学习 > C#/ASP.NET >>

C#线程控制

有一个爬虫程序,开启了10个下载线程和1一个扫描线程(用于解析文件,提取Url放入Url队列)。已知进程结束的状态时10个下载线程已经下载完毕,扫描线程扫描完毕,Url队列为空。我应该如何设计控制进程的结束呢?采用信号量? --------------------编程问答-------------------- 信号量是互斥的,你等待结束,就用waitformultiobjects --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
信号量是互斥的,你等待结束,就用waitformultiobjects
同意 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼 xuexiaodong2009 的回复:
引用 1 楼 bdmh 的回复:

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

++ --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
信号量是互斥的,你等待结束,就用waitformultiobjects
正解。 --------------------编程问答-------------------- 能具体说说怎么做吗?不是太理解。我本来是打算采用信号量进行计数的,创建11个信号量,如果某个线程停止,信号量减1,唤醒了就增1.如果信号量集为空了,那么久表示所以线程都停止工作了。不知道这样行不行?使用waitformultiobjects又是怎么做的?有相关的资料参考吗? --------------------编程问答-------------------- 结束线程不是Thread.CurrentThread.Abort();吗
本人菜鸟~各位勿喷 --------------------编程问答-------------------- 你在一个列表里保存所有Thread对象的引用。

在程序退出之前轮流调用Thread的Join方法 --------------------编程问答-------------------- 可以搜索一下: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 --------------------编程问答--------------------
引用 8 楼 icedmilk 的回复:
你在一个列表里保存所有Thread对象的引用。

在程序退出之前轮流调用Thread的Join方法

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

public void WaitBegin()
{
Monitor.Enter(this);
while ( !m_started ) 
{
Monitor.Wait(this);
}
Monitor.Exit(this);
}

这段代码是什么意思?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,