代码之家  ›  专栏  ›  技术社区  ›  jp2code

清除线程池

  •  0
  • jp2code  · 技术社区  · 16 年前

    我正在用C_开发Visual Studio 2008中的第一个线程池应用程序。

    我有一个报告必须使用我们的SQL服务器上的数据对2000到4000个部分执行计算。

    我在一个线程工具中对所有的部件号进行排队,在那里它们开始计算结果。当这些线程完成时,将激发RegisterWaitForSingleObject事件以注销排队项的句柄。

    在所有排队的项目都完成后,是否有方法将它们从线程池中删除?

    从外观上看,如果有人使用一组新的2000到4000个部件运行另一个报告,我无法删除以前的部件数组。

    如何删除以前排队的项目?调用workerthreads=0的setmaxthreads会吗?

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

    谢谢你的时间,

    2 回复  |  直到 16 年前
        1
  •  4
  •   Adam Robinson    16 年前

    曾经一次 ThreadPool 项目完成后,它将自动从队列中删除。什么向你表明他们没有?

        2
  •  2
  •   Community Mohan Dere    9 年前

    假设您打算中断(取消)当前队列上的工作…

    更改最大线程数不会影响挂起的工作;它只会更改可执行该操作的线程数-通常情况下,这是一个坏主意(您的代码不是使用 ThreadPool )我将使用自定义队列-编写基本(线程安全)生产者/消费者队列相当容易,或者.NET 4.0包含一些非常好的自定义线程队列。

    然后您只需中止自定义队列并启动一个新队列。

    我写了一个简单的 here ;此时,它希望在终止之前完全退出(即清空队列,直到队列为空),但添加一个标志,以便在当前项之后立即停止(不要在执行过程中的任意点中断/中止线程;这不是一个好主意)。