2011-08-24 100 views
1

我正在使用TinyThread ++在我的项目中获取干净而简单的独立于平台的线程控制功能。我刚刚遇到了一种情况,即希望在不挂钩CPU的情况下响应同步消息传递,同时允许线程在闲置时继续执行一些工作。当然,我可以简单地产生第三个线程来做这个“其他工作”,但我所缺少的是一个条件变量wait(int ms)类型的功能,而不是wait()已经很好。我的想法是,我希望它只能阻止高达ms毫秒,因此它可以定时超时并执行一些操作(在此期间线程不会主动等待条件变量)。这个想法是,即使让线程坐在那里等待着任何传入的消息,但是如果我给它一些任务来执行只需要50微秒的执行,我只需要每隔一段时间运行一次其次,它绝对不应该促使我创建另一个线程(以及消息队列和其他资源)来完成它。多线程:阻塞等待超时

这是否有任何意义?我正在寻找关于如何执行此操作的建议。我希望添加几行TinyThread代码可以为我提供此功能。

+0

TinyThread ++的网站是什么?帮助我们在这里一点;谷歌搜索变成了Softpedia和其他各种下载网站,所以拥有规范的源代码会很好。 –

+0

http://tinythread.sourceforge.net/ –

回答

1

好为wait function源代码也不是很复杂,从而使得所需modificiations看起来很简单:

  • Linux实现依赖于调用pthread_cond_wait函数 可以平凡改为pthread_cond_timedwait 功能。如果我忘记了任何minutias,请仔细阅读文档。

  • 在事物的窗口方面,它更复杂一些,我不是Windows上多线程的专家。据说 ,如果有一个_wait函数(我敢肯定有)的定时版本, 改变应该工作得很好。再次,在做任何修改之前,请仔细阅读文档。

现在在你开始做这些修改之前,我不认为你想要做的是一个好主意。使用线程的主要优点是从概念上分离不同的任务。试图在单个线程中完成多个事情有点像试图在单个函数中执行多个事情:它使设计复杂化,并使事情更难调试。所以除非创建一个新线程的开销太大或者除非生成的代码仍然简单易懂,否则我会将它分解为多个线程。

最后,我感觉你可能没有意识到条件变量可能会虚假地返回(当条件仍然是错误时,没有任何人做过任何信号或返回)。所以为了以防万一,我建议您查看usage examples并确保您了解为什么这些循环在那里。

+0

是的。我已经考虑过了,并决定我不想像我所描述的那样实际执行它。然而,对我来说,如果我需要它的功能,那将是有益的。为此,您提供的信息非常有帮助。 –