我正在尝试在 Windows 下严重依赖 boost::fibers 的应用程序中使用 MariaDB async API for C。很难提供一个有效的例子,我希望有人在试图找出问题之前知道它是否应该工作。
会发生什么 - 在任何启动/继续函数被调用一次之后(从普通线程或从 boost 光纤)尝试从光纤再次调用它在 MariaDB 客户端代码中失败
int
my_context_continue(struct my_context *c)
{
void *current_fiber= IsThreadAFiber() ? GetCurrentFiber() : ConvertThreadToFiber(c);
c->app_fiber= current_fiber;
SwitchToFiber(c->lib_fiber);
return c->return_value;
}
在 SwitchToFiber 通话中。有趣的观察 - 显然 IsThreadAFiber() 返回 true,但 GetCurrentFiber() 在此时返回 NULL。
当使用非阻塞 API 时一切正常,当运行没有纤程的异步 API 时一切正常。
谢谢你的帮助,