#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 (), как только я вставил то же самое, он сработал.