草庐IT

Boost-asio

全部标签

c++ - boost ASIO 和线程之间的消息传递

我正在设计一个websocket服务器,它接收一条消息并将其保存到一个嵌入式数据库。为了阅读消息,我正在使用boostasio.要将消息保存到嵌入式数据库,我会看到几个选项:在同一线程上收到消息后,立即同步保存消息。在单独的线程上异步保存消息。我很确定第二个答案是我想要的。但是,我不确定如何将消息从套接字线程传递到IO线程。我看到以下选项:每个线程使用一个io服务并使用postfunction线程之间进行通信。这里不得不担心锁的争用。我应该吗?使用Linux域套接字在线程之间传递消息。据我了解,没有锁争用。在这里,我可能可以使用BOOST_ASIO_DISABLE_THREADS宏来获

c++ - Boost Spirit Qi Symbols默认值和NULL值

BoostSpiritqi::symbols实现了一个键值对映射:给一个字符串的键,它可以返回某个值。我的问题是:1)对于一个空字符串,是否可以返回一个默认值?(代码中的Q1)2)对于非空字符串或键值对映射中列出的键,是否可以返回一个值表示该键无效?(代码中的Q2)**以下代码基于BOOSTSPIRIT文档。**在此先感谢您的任何建议。#include#include#include#include#include#include#include#include#includetemplatevoidtest_parser_attr(charconst*input,Pconst&p,T

c++ - 使用 boost::spirit::x3 解析为 vector<boost::string_view>

这是我的previousone的后续问题关于boost::spirit::x3和boost::string_view.虽然我可以解析成std::vector(liveexample),解析为std::vector失败并出现以下编译错误:#include#include#includenamespaceboost{namespacespirit{namespacex3{namespacetraits{templatevoidmove_to(Itb,Ite,boost::string_view&v){v=boost::string_view(b,std::size_t(std::dista

c++ - 嵌套的 Boost 融合结构

是否可以在单个语句中定义(或改编)包含成员BoostFusion结构的BoostFusion结构?例如,我如何调整或定义与此等效的内容:structOuter{inti;floatj;structNested{inta;}nested;};Outer和Outer::Nested都是可反射类型。以由内而外的顺序定义所有内部类型非常困惑并且将内部类型暴露在外部。 最佳答案 您应该能够使用其完全限定名称“定义”内部结构:BOOST_FUSION_ADAPT_STRUCT(Outer::Nested,a)BOOST_FUSION_ADAPT

c++ - 如何使用 C++ 获取文件夹/目录名称,但不是一个文件的路径?特别是 boost::filesystem;

这个问题在这里已经有了答案:Gettingadirectorynamefromafilename(11个答案)关闭6年前。std::stringfile="C:\\folder1\\folder2\\folder3.txt";fs::pathfile_path(file);fs::pathfile_dir=file_path.parent_path();//"C:\\folder1\\folder2";std::stringstr_path=file_path.string();std::stringstr_dir=file_dir.string();std:stringstr_fol

c++ - boost::spirit 默认语义 Action 和字符串组合

我有以下代码和平:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includenamespacespi=boost::spirit;namespaceqi=boost::spirit::qi;TEST(TestBoost,cpp_comment){usingqi::char_;usingqi::omit;usingqi::eoi;typedefstd::stri

c++ - Boost::ASIO:如何从 io_service 获取返回值?

如何从boost::asio::io_service获取返回值?是否可以使用一些绑定(bind)或任何不涉及重写函数的简单构造?下面是一个最小的例子。我正在trycatchGetSum()的返回值:#include#include#includeusingnamespacestd;voidSayHello(){std::coutTGetSum(Ta,Tb){std::cout,1,2));ioservice.run();return0;}为什么?因为我正在设计一个线程池,而且我正在考虑我的选择,使用户能够获得他的函数的返回值,而不必手动用另一个函数包装他的函数,为他捕获返回值.我的解决

c++ - 使用 Boost::Spirit 解析前置条件和递归

我正在尝试使用Boost::Spirit解析PDDL文件,但在将前提条件解析为结构时遇到了一些问题。我很难理解关于如何将条件放入我的结构和递归的Boost手册。我在下面给出了一段代码,应该可以很好地说明问题。必须解析如下所示的字符串::precondition(and(at-pos?r?pos)(not(has-pos?m?pos)))到目前为止,我的代码看起来像这样,但我几乎可以肯定我不了解at_c是如何工作的,因为我还没有使用过Boost::Phoenix。predi_param='?'>>name_type;predi='('>>name_type>>+predi_param>>

C++ Boost 1.66 使用 Beast http 请求解析器解析字符串

我没有在我的项目中使用beasthttp服务器,但我正在寻找一种解决方案来在我的程序中以std::string的形式解析http请求,是否可以使用boost/beast/http/parser.hpp在这种情况下,如果是的话,如果你在代码中给出一个例子,那就太好了。非常感谢 最佳答案 是的,这是可能的:std::strings="POST/cgi/message.phpHTTP/1.1\r\n""Content-Length:5\r\n""\r\n""abcde";error_codeec;request_parserp;p.put

c++ - 使用 Boost Beast 通过代理发出同步 http 请求时出现问题

我修改了http_sync示例以通过代理连接,我用wireshark进行了测试,问题是在我发送http连接请求后,代理返回代码200OK,我的程序无法读取,它在http::read上等待了大约1分钟,然后服务器断开了我的连接。我试过解决这个问题,只是不读取响应,但是当我尝试进行ssl握手时,我得到一个错误:未知协议(protocol)(据wireshark显示,我的ssl握手发送一个客户端问候,然后我收到完整的服务器问候,但我的程序同时发送了一个FIN并给了我错误,我认为这是因为他阅读了200OK而不是服务器的回答并且感到困惑)。所以我想我的问题是,有没有办法解决这个问题?我不明白为什