我正在使用C#在Visual Studio2008中开发我的第一个ThreadPool应用程序。
我有一个报告,它必须使用我们SQL Server上的数据对2000到4000个零件执行计算。
我将所有的零件号排列在一个ThreadPool中,在那里它们离开并计算它们的结果。当这些线程完成时,将激发RegisterWaitForSingleObject事件以注销排队项的句柄。
在所有排队的项目都完成后,有没有办法从ThreadPool中删除它们?
看起来,如果有人使用一组新的2000到4000个部件运行另一个报表,我无法删除以前的部件数组。
如何删除以前排队的项目?用workerThreads =0调用SetMaxThreads会这样做吗?
我意识到我可以进行实验,但我可能会浪费这周的大部分时间进行实验。
耽误您时间,实在对不起,
乔
发布于 2009-09-21 15:49:07
一旦ThreadPool项完成,它就会自动从队列中删除。向您表明它们不是的是什么?
发布于 2009-09-21 15:49:51
假设您打算中断(取消)当前队列中的工作...
更改最大线程数不会影响挂起的工作;它只会更改可用于执行此操作的线程数量-通常情况下,扰乱这一点并不是一个好主意(您的代码并不是唯一使用ThreadPool的对象)。我会使用自定义队列--编写一个基本的(线程安全的)生产者/消费者队列是相当容易的,或者.NET 4.0包含了一些非常好的自定义线程队列。
然后,您可以中止自定义队列并启动一个新队列。
我写了一个简单的here;目前它想要在终止之前干净地退出(即排空队列),但在当前项之后添加一个立即停止的标志将是足够容易的(不要在执行中的任意点中断/中止线程;这从来不是一个好主意)。
https://stackoverflow.com/questions/1455217
复制相似问题