2014-09-28 90 views
-6

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

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

,并在监视窗口中我可以看到我的线程仍然活着。

+0

您可以添加示例代码,以便我们更好地理解您想要执行的操作吗? – dotnetom 2014-09-28 08:08:28

+0

问题有点不清楚,你问你为什么终止线程没有做任何工作? – 2014-09-28 08:10:31

+0

也许你应该只使用ThreadPool队列。 – 2014-09-28 08:21:32

回答

3

的问题是,当我在队列中换上新任务的线程不会开始,因为它被终止从队列

弹出。如果线程在推送项目时被终止,则必须创建一个新线程。终止的意思是“从操作系统的角度来看”。它不会重新启动。当让线程中的函数“用完”时会发生 - 方法中跳转的返回将终止线程。

通常,我不会在此处使用线程 - 只要将某个项目推入队列并且没有任何已安排的任务,我就可以处理任务并排队任务。有一些“HasTask”布尔与一些锁定,你被设置。

会发生什么是你有一个编程错误,显示没有代码,并且不要考虑你的逻辑中的边界情况。因此,线程拉动项目结束,你推入一些东西进入队列, - 呃....我建议你开一个新的问题,它有(a)相关的标题和(b)显示更多的工作来完成调试,在足够的代码示例的形式来引导您解决问题。这里的答案和你问的问题一样好。

+1

@Majidkhalili你能解释为什么标记为长时间运行的任务不适合IO吗?提示:不是。当显示为终止时,它显然不活着。你的线程处理被破坏,就是这样。那样简单。修复它,或者用CODE打开一个正确的问题,这样我们可以帮助你。 – TomTom 2014-09-28 08:43:10

+0

好男人停止投票给我,我明白了,我只是看看文档和垃圾收集器,看看会发生什么事终止线程。 – 2014-09-28 08:51:36

+0

@Majidkhalili Downvotes表示该问题有问题。你的问题并不清楚,最重要的是你对那些正在努力帮助的人不礼貌。 – cybermonkey 2014-09-28 08:52:29