【发布时间】:2011-05-16 13:09:24
【问题描述】:
我在我的应用程序中使用ThreadPool。我首先使用以下方法设置了线程池的限制:
ThreadPool.SetMaxThreads(m_iThreadPoolLimit,m_iThreadPoolLimit);
m_Events = new ManualResetEvent(false);
然后我使用以下命令将作业排队
WaitCallback objWcb = new WaitCallback(abc);
ThreadPool.QueueUserWorkItem(objWcb, m_objThreadData);
这里 abc 是我正在调用的函数的名称。 在此之后,我正在执行以下操作,以便我的所有线程都达到 1 点,并且主线程接管并继续进一步
m_Events.WaitOne();
我的线程限制是 3。我面临的问题是,尽管线程池限制设置为 3,但我的应用程序同时处理超过 3 个文件,而它应该只处理 3 个文件一次。请帮我解决这个问题。
【问题讨论】:
-
你应该检查
SetMaxThreads()的返回值。 -
除非您知道自己在做什么,否则最好不要乱搞线程池中的线程数。让运行时处理它。如果您需要限制同时访问的文件数量,请找到更好的方法 - 例如使用信号量。
-
Microsoft 不允许您设置最大线程数
标签: c# .net multithreading threadpool