我想实现一个查询数据库并异步执行查询的对象。
假设我们有一个要查询的对象A,它使用对象B。A调用B的executeQuery方法,然后开始执行其他任何操作。B的ExecuteQuery方法是异步的,对于quini A是非阻塞的。当查询的结果准备好时,我希望它在B中通过回调通知给A,这样A就可以只在准备好的时候读取结果。
在C ++ 11中实现此机制的最佳方式是什么?
我用std ::async尝试过,但是为了在std ::future中读取结果,我希望在std ::future已经包含结果时接收一个回调,从而避免我的调用成为阻塞。
谢谢
发布于 2017-01-31 17:02:07
当您有未来时,可以使用.wait()等待执行完成,或者可以使用boost::mutex在某个事件发生时向其他线程发出信号,然后让一些事件函数对其执行操作。
然而,我认为您可能需要老式的回调函数设置--只需将一个函数指针传递给ExecuteQuery函数,然后让它调用它
发布于 2019-01-15 12:46:07
您可以将一个指针传递给函数并执行它。
或者将std::future与std::async一起使用
你应该使用wait_for函数而不是wait。并检查结果是否准备就绪。
你也可以在异步函数结束时设置原子布尔值。并在主线程中检查这个布尔值。
https://stackoverflow.com/questions/28947681
复制相似问题