Via*_*lov 9 c++ logging qt multithreading
我在Qt中编写了一个多线程应用程序(几个线程都有自己的事件循环).记录时,我希望记录器在日志中包含一个线程ID(它们具有有意义的名称).Qt默认记录器似乎无法做到这一点.所以我有三个选择:
哪一个更好,一般的最佳做法是什么?
在评论中提出问题后要澄清一些事项:
postEvent()
,它是线程安全的.所以问题就变成了,记录器线程是否需要为每个事件做足够的工作来证明在某种队列中编组事件数据的成本是合理的
这些是一般性的评论,因为我没有Qt的经验.关于排队的成本,一般来说:I/O通常会让其他运行时成本变得苍白,所以无所谓.
专用日志记录线程的属性:
直接从每个线程记录的(dis)优点与上述相反.没有两个线程可以同时记录(因为函数像printf()
隐式锁定a FILE
,或者因为你明确地同步了日志函数); 这使得所有想要记录块的线程在当前线程完成之前.如果为了调试目的而进行了日志记录,则可能希望记录无缓冲(以便在发生后续崩溃时数据不会丢失),这会加剧运行时的影响.
这有多糟糕取决于应用程序的性质以及日志记录机制和数据量.