Paho C ++异步客户端回调vs action_listener vs connected_handler

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Paho C ++异步客户端回调vs action_listener vs connected_handler相关的知识,希望对你有一定的参考价值。

我正在尝试了解使用async_client时Paho MQTT C ++库中各种回调机制的用法和行为,特别是:

  • mqtt :: callback
  • mqtt :: iaction侦听器
  • mqtt :: connection_handler

我要实现的目标:等待成功连接的阻塞初始化方法成功订阅主题列表(以一个主题开头),以及自动重新连接如果连接中断,请重新订阅这些主题。

'async_subscribe'示例(https://github.com/eclipse/paho.mqtt.cpp/blob/master/src/samples/async_subscribe.cpp)建议我应该订阅mqtt :: callback :: connected中的主题。但是,它没有显示如何然后等待订阅成功完成。我的理解是,我不应该在连接的回调中的订阅令牌上调用“等待”。如果我设置了一个私有var _subscribeToken来等待,似乎无法保证在等待连接令牌完成后是否已经设置了它,即(伪代码):

void Callback::connected(const std::string& cause){
    _subscribeToken = _client->subscribe(topic, qos, nullptr, action_listener);
}

初始化中:

token_ptr connectToken = connect(connectOpts);
connectToken->wait();

_subscribeToken->wait(); // but _subscribeToken may still be null at this point. 

connectToken->如果不能保证回调已经被调用,有什么意义?我很可能误会了一些东西,但我想指出正确的方向!

答案
[通过进一步研究C ++ / C库,我能够确定Callback :: connected被称为

after

Token :: on_success(因此,在等待已完成之后)。

以上是关于Paho C ++异步客户端回调vs action_listener vs connected_handler的主要内容,如果未能解决你的问题,请参考以下文章

C语言的回调函数

C++11 线程与异步性能(VS2013)

在c ++中使用回调异步运行linux命令

C语言函数指针之回调函数

Promise 异步

Promise 异步