Пример использования mosquittopp в асинхронном режиме

Коллеги, покажите, пожалуйста, пример использования connect_async, mosquitto_loop_start для организации подписки в клиенте. Не получается у меня без вызова mosquitto_loop прочитать топик. Может, нужно создать поток, в нем mosquitto_loop_start, цикл с mosquitto_loop внутри, после выхода из цикла mosquitto_stop?
И вообще, mosquittopp может работать в неблокирующем режиме?
Раньше работал с библиотекой Pаho MQTT C++ Client. Там асинхронный режим реализован внутри библиотеки - определяешь обработчики, подключаешься и все. А как это делается в mosquittopp, не понимаю:((

Там же в документации всё написано.
mosquitto_loop_start - само запускает фоновый поток с циклом.

В дереве исходников mosquitto есть примеры, насколько я помню.
Mosquittopp - это тупая обёртка над C-интерфейсом mosquitto, так что всё одинаково.

Можете посмотреть как у нас сделано:


Тут также реализован. Только там нет функции вида set_callback, там библиотека дёргает методы с названиями on_connect, on_message и т.п.

И да, совсем не обязательно использовать libmosquitto, если вам клиент от Paho нравится. Протокол же стандартный, библиотеки Paho прекрасно работают с брокером Mosquitto.

Там пример блокирующих вызовов, что-то типа этого:
    while(1){
        rc = tempconv->loop();
        if(rc){
            tempconv->reconnect();
        }
    }

Так и вас то же самое:
int TMQTTClient::LoopFor(int duration, int timeout)
{
steady_clock::time_point start = steady_clock::now();
int cur_duration;
int rc = 0;

while (1) {
	rc = this->loop(timeout);

    cur_duration = duration_cast<milliseconds>(steady_clock::now() - start).count();
    if (cur_duration > duration) {
        return rc;
    }

	if(rc != 0) {
		this->reconnect();
    }
}

}
Ну, ладно, хотел быстро. Быстро не получается…
Спасибо.

libmosquitto пытаюсь использовать именно потому, что paho не нравится. Эта либа заточена на постоянное соединение. Мне нужно подключиться, сделать все, что нужно и отключиться. В таком режиме у библиотеки жуткие таймауты, которые гробят все…

Все было просто - при сборке библиотеки забыл указать ключик WITH_THREADING.
Под линуксом теперь летает, в виндах - тормозит примерно на минуту при вызове pthread_join.