c++ - 捕获调用堆栈并让它在不同的线程中执行

标签 c++ c multithreading

我需要编写一个日志记录 api,它在单独的线程上执行实际的日志记录。

即我有一个应用程序想要记录一些信息。它调用我的 API,该 api 捕获所有参数等,然后将其交给一个单独的线程进行记录。

记录器 api 接受可变参数,因此我最初的想法是捕获整个调用堆栈并以某种方式将其交给将执行日志记录的线程。

我很高兴能够捕获调用堆栈。但是我不确定如何将此调用堆栈传递给另一个方法。

我在 linux 上使用 g++,它可能还必须在 solaris 上与 Sun 的 CC v12 一起工作。

任何想法。

最佳答案

您可以在调用堆栈上捕获固定数量的字节,但即使在不需要时也必须复制所有内存并将其放入某种队列以将其传递给日志记录线程。似乎需要做很多工作才能开始工作,而且效率很低。

我假设您正在使用单独的日志记录线程来提高日志记录 API 的效率。在这种情况下,让日志记录 API 提取可变参数、将它们转换为更简单的表示形式(例如要记录的字符串)并将其排队可能会更有效。

另请注意,良好的日志记录 API 不应阻塞,因此我建议在日志记录 API 和日志记录线程之间使用无锁队列。

关于c++ - 捕获调用堆栈并让它在不同的线程中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235778/

相关文章:

c++ - 这段代码是什么意思 "ofstream fout(getenv("OUTPUT_PATH"));"

c++ - OpenCV实时立体摄像头图像处理问题(后标定)

c++ - 与关键字 'private' 相关的错误

c - 在c套接字编程中接收反向数据

c++ - QT5 : Multithread Tcp server doesn't send data to user

java - 以下从某些队列实现中检索整数值的代码是否正确

C++/QT - 文件读取意外停止。其他一切都在正常工作

c - 如何使线程操作的结果对进程中的所有其他线程可见?

c - 线程: Multiple File Access

C++ std lib <mutex>, <conditional_variable> 库和共享内存