首页 新闻 会员 周边

ThreadPool.GetMaxThreads中的活动线程只包括线程池中的吗,包括thread创建的不?

0
悬赏园豆:5 [已解决问题] 解决于 2016-04-01 16:54

//
// 摘要:
// 检索由 System.Threading.ThreadPool.GetMaxThreads(System.Int32@,System.Int32@) 方法返回的最大线程池线程数和当前活动线程数之间的差值
//
// 参数:
// workerThreads:
// 可用辅助线程的数目。
//
// completionPortThreads:
// 可用异步 I/O 线程的数目。

 

 

sicnu-yudidi的主页 sicnu-yudidi | 初学一级 | 园豆:108
提问于:2016-03-31 15:34
< >
分享
最佳答案
0

 

不包括

收获园豆:4
Launcher | 高人七级 |园豆:45045 | 2016-03-31 15:36

哦,但是这样的话,我这段代码根本停不下来。没有什么道理啊,到最后始终都有两个活动线程

if (maxThreads == availableThread-1)
{
MessageBox.Show("线程池已空闲 350 line");
//UpdateProgress_Invoke(progress);//防止线程池完成后,界面显示的进度滞后;
//MessageBox.Show("界面最后一次更新已经执行");
Crawler_save_to_xml();
Crawler_Finish();

break;
}

//使用委托更新进度;
Thread.Sleep(1000);
UpdateProgress_Invoke(progress);


//使用委托进行调试信息输出;

PrintInfo_Invoke(maxThreads-availableThread);

sicnu-yudidi | 园豆:108 (初学一级) | 2016-03-31 15:43

@原始滴滴: 那只能说明你直接或间接使用了 ThreadPool 中的线程池。你可以在调试时选择“暂停”,然后在“线程”窗口中看到当前有哪些线程,以及它们正在执行的方法。

Launcher | 园豆:45045 (高人七级) | 2016-03-31 15:58

@原始滴滴: 你为什么要判断线程池中可用线程数量?线程池中有些线程是clr用的,类似像gc,线程池线程回收,finalizer线程等。如果你要在挂在vs下debug还会多个辅助线程。

Daniel Cai | 园豆:10424 (专家六级) | 2016-03-31 17:43

@Launcher: 哦,会用了

sicnu-yudidi | 园豆:108 (初学一级) | 2016-03-31 18:53

@Daniel Cai: 请问你的意思是说,这样判断不准确吗? 如果只有线程池,没有方式启动的其他线程的情况下,这个是可行的啊。

sicnu-yudidi | 园豆:108 (初学一级) | 2016-03-31 18:54

@原始滴滴: 问题是你判断这个是做什么用途的?

Daniel Cai | 园豆:10424 (专家六级) | 2016-04-01 09:28

@Daniel Cai: 用来判断是否退出线程滴,已经发现错误了,是我的爬虫url队列一直有个是抛异常的,然后我把抛异常的都放回队列,导致了一直有个url在队列中,所以停不下来

sicnu-yudidi | 园豆:108 (初学一级) | 2016-04-01 09:36

@原始滴滴: 恩,可以暂停线程,让我找出了问题所在.3q

sicnu-yudidi | 园豆:108 (初学一级) | 2016-04-01 17:09
其他回答(1)
0

4.0下CountdownEvent专门做计数的。

4.0以下版本可以自己在EventWaitHandle上做包装达到相同功能。

没必要通过这种暴力方式来判断。

收获园豆:1
Daniel Cai | 园豆:10424 (专家六级) | 2016-04-01 10:13

 好滴,我试下

支持(0) 反对(0) sicnu-yudidi | 园豆:108 (初学一级) | 2016-04-01 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册