从线程返回发布资源?

时间:2014-09-28 08:07:06

标签: c# multithreading

我有一些IO工作要做,我把它们推入队列,并且有一个计时器检查这个队列,如果queve不为空,我运行一个线程,在这些IO工作期间做IO工作我可能会添加一些队列中的新任务。 问题是,当我在队列中放入一个新任务时,线程不会从队列中弹出并说该资源正由另一个人使用。 我是否必须手动终止或释放线程的资源,或者在函数中返回呢?

myFunctionThread()
{
    while ( q.Count != 0)
     doSomeTask(deQueue(q));
}

并且在观察窗口中我可以看到我的线程仍然存在。

1 个答案:

答案 0 :(得分:3)

  

问题是,当我在队列中放入一个新任务时,线程不会从队列中弹出

因为它被终止了。如果在推送项目时终止线程,则必须创建一个新项目。从操作系统的角度来看,终止意味着完成了#34;。它不会重启。当你让线程中的函数用完时,会发生错误" - 从跳转方法返回将终止线程。

通常,我不会在这里使用线程 - 每当我将一个项目推入队列并且没有任何任务已经安排时,我会处理任务并排队任务。一点点" HasTask"有一些锁定的bool你已经设定好了。

您遇到编程错误,没有显示代码,也不考虑逻辑中的边缘情况。所以线程拉动项目结束,你把东西推入队列 - 好吧......我建议你打开一个新的问题,它有(a)一个相关的标题,(b)显示更多你的工作要做的调试,足够的代码示例的形式,以指导您解决问题。这里的答案与您提出的问题一样好。