【发布时间】:2015-06-22 19:09:26
【问题描述】:
在我的应用程序中,我想实现一个高效的数据记录器,它将轨迹打印到文件中。该应用程序在 Beaglebone Black 上运行,并且有一些软时间关键点。这就是为什么我不想简单地在旅途中打印痕迹,因为这会减慢应用程序的速度。我想知道创建一个可以做到这一点的单例数据记录器类。现在我想知道将跟踪保存到推送到列表的字符串变量中。然后在单独的线程中从列表中取出项目并保存到文件中。
现在我知道如何做到这一点的方法是每隔几毫秒检查该单独线程中的列表长度是否大于 0,即每 100 毫秒使用睡眠。问题是我检查得越频繁,消耗的处理器能力就越多。我知道有像观察者这样的 Linux 机制可以观察文件的变化。我想知道变量是否存在这种机制?例如,每次我将一个项目放入列表时,我都会增加一个整数变量,然后可以在监视变量更改时触发保存到文件线程。
我什至不确定这种机制是否是应用程序的最佳方法,这只是我想到的。
【问题讨论】:
-
文件 I/O 并没有操作系统为您缓冲那么糟糕。如果您的应用程序已经是多线程的,则可以使用同步队列。你可以考虑引入一些日志框架,比如 log4cxx 或 Boost.log。在此处查看一些提示:C++ logging framework suggestions
-
斯特凡,谢谢你的链接。我会在未来的项目中记住它们,但现在这些框架将比我的整个应用程序更大。我想保持简单并暂时学习一些新东西,这就是我想自己编写记录器的原因。
标签: c++ linux multithreading variables