Ответы пользователя по тегу Boost
  • Как подключить boost в проект CMake Project в Visual Studio 2022?

    Nipheris
    @Nipheris Куратор тега C++
    то ничего не получается

    Это не описание проблемы. Пожалуйста, приведите в вопросе вывод отработавшей команды find_package для начала.
    Это во-первых. Во-вторых - у вас буст скорее всего не ищется как надо, но вы на это "забиваете", засунув всю логику в if (Boost_FOUND) - ну т.е. если буст НЕ найден, то ничего не делать. Даже add_executable не будет выполнен. Я понимаю что вы где-то взяли какой-то пример, но надо думать и самому, точнее сначала разбираться, а потом уже будет над чем подумать.

    И да, использование include_directories и target_link_libraries в режиме передачи lib-файлов - это допотопный подход. ЕМНИП, Find-модуль для Буста создаёт вполне себе человеческие imported-таргеты, советую использовать их.
    Ответ написан
  • Для чего в данном примере нужно дожидаться асинхронную операцию?

    В этом же примере всё и написано, чуть выше. Цитирую:
    // Set up the variables that receive the result of the asynchronous
    // operation. The error code is set to would_block to signal that the
    // operation is incomplete. Asio guarantees that its asynchronous
    // operations will never fail with would_block, so any other value in
    // ec indicates completion.
    ec = boost::asio::error::would_block;
    std::size_t length = 0;

    Обратите внимание на "so any other value in ec indicates completion". Нам показывают, что начальное значение ec выставляется в would_block и используется как маркер того, что мы ЕЩЁ ничего не записали в переменную ec в обработчике handle_receive. Иными словами, как маркер того, что handle_receive ещё не выполнился. Когда выполнится - то, согласно интерфейсу Asio, в него прилетит что-либо, отличное от would_block, что и будет им записано в ec. Это и будет условием выхода из цикла.

    Цикл здесь организован, чтобы дождаться выполнения конкретно асинхронной операции чтения.
    Вам может показаться, что асинхронная операция здесь запускается только одна, но это не так, ведь есть ещё срабатывание таймера deadline_. Из чего можно заключить, что каждый вызов run_once может запустить либо обработчик handle_receive, либо check_deadline (напомню, что run_once прокачивает только один вызов какого-либо обработчика в очереди).
    Ответ написан
  • Как прочитать весь http запрос вместе с телом?

    Nipheris
    @Nipheris Куратор тега C++
    async_receive:
    The receive operation may not receive all of the requested number of bytes. Consider using the async_read function if you need to ensure that the requested amount of data is received before the asynchronous operation completes.


    Но т.к. вы всё равно заранее не знаете, сколько байт вам нужно прочитать, я не вижу проблемы в поведении async_receive. Вам нужно отслеживать состояние вашего протокола (в вашем случае - HTTP) и понимать, когда нужно подождать ещё данных, а когда уже всё пришло.
    Ответ написан
    Комментировать
  • Как подключить boost.python без ошибок?

    Nipheris
    @Nipheris Куратор тега C++
    Раз у вас свежий CMake и если я правильно понял ваши намерения, давайте попробуем вот такой вариант:
    cmake_minimum_required(VERSION 3.14)
    project(foobaria)
    
    find_package(Python3 REQUIRED COMPONENTS Development)
    find_package(Boost REQUIRED COMPONENTS python)
    
    python3_add_library(main MODULE src/_nonsence.cpp)
    target_link_libraries(main Boost::python) # тут возможно нужно Boost::python3
    Ответ написан
  • Где найти готовые сборки boost для Visual Studio 2017?

    Брать vcpkg и собрать самому парой команд.
    Ответ написан
    Комментировать
  • Как работать с сетью используя boost?

    Nipheris
    @Nipheris Куратор тега C++
    Boost.Beast если вам таки HTTP нужен, а не просто TCP/IP (примеры)
    Ответ написан
    Комментировать
  • Как забиндить classmember handler для boost::asio?

    Nipheris
    @Nipheris Куратор тега C++
    99%, что удаленная функция - это конструктор копирования.
    По смыслу объекта сокета можно догадаться, что копировать его не стоит (т.к. так или иначе он представляет собой обертку над системным ресурсом). Раз его копировать не стоит, используйте указатель на сокет вместо самого сокета. Например, shared_ptr, вот как тут советуют: stackoverflow.com/questions/5425666/passing-around... .

    Вообще, привыкайте, что по значению сложные объекты передаются довольно редко (почти никогда), т.к. передача по значению противоречит сути этих объектов - существовать строго в том количестве, в котором их насоздавал программист.
    Ответ написан
    1 комментарий
  • Что использовать в С++(Qt,Boost) для простого серверного приложения-хранилища данных?

    Nipheris
    @Nipheris Куратор тега C++
    cpp-netlib.org или doc.qt.io/qt-5/qnetworkrequest.html если нужен HTTP
    Boost::Asio, если не нужно HTTP
    Berkeley Sockets все еще в моде, если не боитесь C-style
    На последние два можно накрутить Protocol Buffers через stream-ы, если протокол достаточно сложный или предполагает расширение.
    Ответ написан
    Комментировать
  • Что означает time при использовании этого класса?

    Nipheris
    @Nipheris Куратор тега C++
    mersenne_twister_engine - вот сам класс mt19937 (сейчас он уже в std есть, так что не факт что буст используется), вот его конструктор: mersenne_twister_engine/mersenne_twister_engine, вот что пишут про его единственный параметр:
    > value - seed value to use in the initialization of the internal state
    Т.е. это зерно для вашего рандом-генератора. Как часто это делается в задачах, не требующих высокого уровня безопасности, зерном берется текущее время.
    А вот собственно функция time. Она принимает один параметр - указатель на time_t, и возвращает также time_t. В любом случае она вернет текущее время, если же вы в кач. первого параметра передадите ненулевой указатель, то она еще и по нему запишет текущее время. В вашем примере передается NULL, т.к. используется возвращаемое значение.
    А вот это - uniform_int_distribution - класс равномерного распределения случайной величины. Скорее всего дальше по коду он используется вместе с рандом-генератором для получения значений случайной величины, удовлетворяющих этому равномерному распределению.
    Ответ написан
    Комментировать