0

我正在使用 C# 在 Visual Studio 2008 中开发我的第一个 ThreadPool 应用程序。

我有一份报告,必须使用 SQL Server 上的数据对 2000 到 4000 个零件进行计算。

我在 ThreadPool 中排队所有的零件编号,他们在那里计算他们的结果。当这些线程完成后,RegisterWaitForSingleObject 事件将触发以取消注册队列项的句柄。

在所有 Queued Items 完成后,有没有办法将它们从 ThreadPool 中删除?

看起来,如果有人使用一组新的 2000 到 4000 个零件运行另一个报告,我无法删除以前的零件数组。

我将如何删除先前排队的项目?使用 workerThreads = 0 调用 SetMaxThreads 会这样做吗?

我意识到我可以做实验,但是我可以把一周的大部分时间都浪费在做实验上。

谢谢你的时间,

4

2 回答 2

4

项目完成后,ThreadPool会自动从队列中删除。什么向你表明他们不是?

于 2009-09-21T15:49:07.397 回答
2

假设您的意思是中断(取消)当前队列上的工作......

更改最大线程数不会影响待处理的工作;它只会改变可用的线程数 - 弄乱它通常是一个坏主意(你的代码不是唯一使用ThreadPool. 我会使用自定义队列——编写一个基本的(线程安全的)生产者/消费者队列相当容易,或者 .NET 4.0 包含一些非常好的自定义线程队列。

然后您可以中止自定义队列并开始一个新队列。

I wrote a simple one here; at the moment it wants to exit cleanly (i.e. drain the queue until it is empty) before terminating, but it would be easy enough to add a flag to stop immediately after the current item (don't resort to interrupting/aborting threads at an arbitrary point in execution; never a good idea).

于 2009-09-21T15:49:51.497 回答