继续调用回调,直到通过回调接收到特定值

Keep calling a callback until a particular value is recieved through the callback

我有一个提供一些数据的回调函数。

callback([](int check) {
});

我想一直调用这个回调函数,直到check的返回值为0,怎么办?回调函数需要一些时间来发送数据。如果我正常使用循环,它会在我等待第一次回调结果时多次调用回调。

如果callback同步执行回调(假设它接受任何可调用),你可以只使用捕获:

bool go;
do callback([&go](int check) {go=check;}); while(go);

或者,如果 callback 在另一个线程中执行回调,您可以使用 std::promise 来“撤消” 并发 :

while([] {
    std::promise<bool> p;
    callback([&p](int check) {p.set_value(check);});
    return p.get_future().get();
  }());

这里的包装器 lambda 让我们避免再次声明 go 只是为了正常分配给它。