我需要编写一个日志记录 api,它在单独的线程上执行实际的日志记录。
即我有一个应用程序想要记录一些信息。它调用我的 API,该 api 捕获所有参数等,然后将其交给一个单独的线程进行记录。
记录器 api 接受可变参数,因此我最初的想法是捕获整个调用堆栈并以某种方式将其交给将执行日志记录的线程。
我很高兴能够捕获调用堆栈。但是我不确定如何将此调用堆栈传递给另一个方法。
我在 linux 上使用 g++,它可能还必须在 solaris 上与 Sun 的 CC v12 一起工作。
任何想法。
最佳答案
您可以在调用堆栈上捕获固定数量的字节,但即使在不需要时也必须复制所有内存并将其放入某种队列以将其传递给日志记录线程。似乎需要做很多工作才能开始工作,而且效率很低。
我假设您正在使用单独的日志记录线程来提高日志记录 API 的效率。在这种情况下,让日志记录 API 提取可变参数、将它们转换为更简单的表示形式(例如要记录的字符串)并将其排队可能会更有效。
另请注意,良好的日志记录 API 不应阻塞,因此我建议在日志记录 API 和日志记录线程之间使用无锁队列。
关于c++ - 捕获调用堆栈并让它在不同的线程中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235778/