1

我想实现一个查询数据库并异步执行查询的对象。

假设我们有一个要查询的对象 A 使用对象 B。A 调用 B 的 executeQuery 方法并开始做其他事情。B 的 ExecuteQuery 方法对于 quini A 是异步的、非阻塞的。当查询的结果准备好时,我希望它在 B 中通过回调通知给 A,以便 A 只有在准备好时才能去读取结果。

在 C++ 11 中实现这种机制的最佳方法是什么?

我用 std :: async 尝试了它,而是在 std :: future 中读取结果我想在我的 std :: future 已经包含结果时收到回调,从而避免我的调用成为阻塞器。

谢谢你

4

2 回答 2

0

当您有未来时,您可以使用 .wait() 等待执行完成,或者您可以使用 boost::mutex 在某个事件发生时向其他线程发出信号,然后让一些事件函数对其进行操作。

然而,我认为也许您需要老式的回调函数设置 - 只需将函数指针传递给您的 ExecuteQuery 函数,然后让它调用它

于 2017-01-31T09:02:06.693 回答
0

您可以将指针传递给函数并执行它。

或将 std::future 与 std::async 一起使用

您应该使用 wait_for 函数而不是等待。并检查结果是否准备就绪。

您还可以在异步函数结束时设置 atomic bool 值。并在主线程中检查这个布尔值。

https://en.cppreference.com/w/cpp/thread/future/wait_for

于 2019-01-15T04:46:06.733 回答