【发布时间】:2015-11-29 13:52:27
【问题描述】:
我正在寻找类似于线程局部变量的东西,但是对于 boost::corotine(实际上我使用 boost:asio::spawn)。考虑以下代码:
void coroutine_work(boost::asio::yield_context yield) {
async_foo( yield );
some_function();
}
void some_function() {
fprintf(log_fd, "%s Some function called", the_magic_request_id);
}
我想在初始化请求时将此the_magic_request_id 设置为某个值,这将类似于“当前请求ID”。
没有这个,我必须将the_magic_request_id 传递给每个功能和每个登录项目的模块。 some_function 只是一个例子,实际上我有很多类,它们做不同的工作,但它们都需要yield_context 和the_magic_request_id 才能创建实例。我想简化这些类的接口。
可能设置“on_sleep”和“on_resume”挂钩,这将设置一个全局变量?或者 boost::coroutine 已经为此提供了一些现成的用户机制?未在文档中找到可用的内容。
【问题讨论】:
-
顺便说一句,我已经做了一个包装器来做到这一点github.com/PSIAlt/asio-libs/blob/master/lib/yield_helper.hpp
标签: c++ boost boost-asio boost-context boost-coroutine