Как связать параметр с повышением asio io_context post?

#c #boost #boost-asio #boost-bind #boost-beast

#c #повышение #повышение-asio #boost-привязка #boost-зверь

Вопрос:

Я пытаюсь отправить данные в io_context, если я свяжу post с методом newdata (без параметра), он будет вызван, однако, если я передам какой-либо параметр, он не сможет вызвать метод newdata.

 std::shared_ptr< boost::asio::io_context >ioc = std::make_shared<boost::asio::io_context>();
 :
ioc->post(boost::bind(amp;myclass::newdata, this));  /// <-- this get called
ioc->post(boost::bind(amp;myclass::newdata, this, 1));  /// <-- this get failed, no compile time error
  

// Я пробовал с помощью boost ::function, но не удалось скомпилировать

 boost::function<void(int>)> p(boost::bind(amp;myclass::newdata, this, _1));
ioc->post(p(1));   // <-- compile time error
  

Комментарии:

1. Ничего конкретного для boost и asio, используйте современную лямбда-функцию C вместо старой bind

2. @JeanDavy Я пробовал с лямбдой, однако я заметил, что это тоже несколько раз не удавалось, не уверен, что происходит не так.

3. Итак, сосредоточьтесь на том, что происходит не так, проблема не в самой лямбде.

4. Я обнаружил, что post успешно работает, однако обработчик никогда не выполняется. каким-то образом ioc не выполняет обработчики… изучаем его подробнее.

Ответ №1:

Поток, который вызывает ioc-> post(), не имеет ioc-> run (), как только я вставил то же самое, он сработал.