草庐IT

asio_handler_invoke

全部标签

c++ - 如何使用 boost::asio::serial_port 支持硬件流控制?

我正在使用Boost的asio::serial_port库与虚拟串行端口(FTDI芯片)通信。我想使用硬件流控制(即RTS/CTS),但我似乎找不到太多关于如何将它与Boost一起使用的文档。我得到的代码是:serialPort.set_option(boost::asio::serial_port::flow_control(boost::asio::serial_port::flow_control::hardware));有了这一行,程序将不会运行。它说:libc++abi.dylib:terminatecalledthrowinganexceptionAborttrap:6如果

c++ - boost asio http服务器,如何停止?

我正在使用boost附带的示例http服务器之一(在doc/html/boost_asio/example/cpp03/http/server,或者在http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/examples/cpp03_examples.html#boost_asio.examples.cpp03_examples.http_server)。该示例打开一个接受器套接字并进行监听,将请求剥离到请求对象。服务器还有一个boostasiosignal_set,它注册信号处理程序并在收到SIGINT或SIGTERM时取消

c++ - 如何为 Boost.Asio 设计自定义 IO 对象

我有一个代表嵌入式设备的基类(DeviceBase),我想与之通信。该设备可以通过多种方式访问​​,包括USB和TCP套接字。此外,还有一个适用于文件的模拟实现。到现在为止,我只使用了同步读/写调用,所有的实现都只是从基类派生的类,覆盖了读/写函数。这使我能够使用多态指针和容器为应用程序逻辑提供对设备的独立于实现的访问。现在我想使用Boost.Asio来启用简单的异步IO。我找到了这个指南http://www.highscore.de/cpp/boost/asio.html描述了如何编写您自己的扩展,但它非常简单,而且我偶然发现了一些在那里没有讨论的问题。目前,我所有的实现都有不同的构

c++ - 如何正确关闭 asio tcp 服务器?

关闭异步boostasiotcp服务器的正确方法是什么?我目前的解决方案通常在析构函数中陷入僵局。为什么?classconnection;typedefstd::set>connection_set;classconnection:publicenable_shared_from_this{shared_ptrsocket_;std::arraydata_;shared_ptrconnection_set_;public:staticshared_ptrcreate(shared_ptrsocket,shared_ptrconnection_set){autocon=shared_pt

c++ - boost::asio 错误?销毁io_service之前的task_io_service

我在我的代码中发现了这个奇怪的错误。这是我设法完成的自包含测试用例。#include#include#include#include#includeusingboost::asio::io_service;usingstd::placeholders::_1;classasync_service{public:async_service();async_service(size_tnumber_threads);~async_service();async_service(constasync_service&)=delete;voidoperator=(constasync_serv

c++ - 如何使用 boost::asio 从网络中断中恢复

我正在编写一个从设备接收数据并处理它的服务器。一切正常,除非网络中断(即,如果我拔下以太网电缆,然后重新连接)。我使用read_until()是因为设备使用的协议(protocol)以特定的字节序列终止数据包。当数据流中断时,read_until()会按预期阻塞。但是,当流再次启动时,它仍然处于阻塞状态。如果我使用Wireshark查看数据流,设备将继续传输并且每个数据包都被网络堆栈确认。但是,如果我查看bytes_readable,它始终为0。如何检测中断以及如何重新建立与数据流的连接?下面是一个代码片段,在此先感谢您提供的任何帮助。[放轻松,这是我的第一个StackOverflow

c++ - 如何使用 boost::asio 连接到 unix 域套接字?

我想通过指定套接字端点的路径名来创建并连接到SOCK_SEQPACKET类型的unix域套接字,但这无法在中编译boost::asiov1.60:usingnamespaceboost::asio::generic;seq_packet_protocolproto{AF_UNIX,IPPROTO_SCTP};//SOCK_SEQPACKETseq_packet_protocol::socketsock(io_service,proto);boost::asio::local::basic_endpointep("/tmp/socket");sock.connect(ep);//does

c++ - 在 Boost Asio 缓冲区中打包结构

我正在寻找一种通过带有BoostAsio的套接字发送由自定义数据结构组成的数据包的方法。目前我知道你可以发送一个带有标准boostasio缓冲区的字符串(在boost::asio::write(..)方法中)。例如,是否可以将数据从填充的结构发送到服务器或客户端?如果是,我需要怎么做,因为我找不到关于此的文档。 最佳答案 您可以按位复制POD对象。事实上,只要T是POD结构,Asio就接受boost/stdarray、T[]或vector缓冲区。http://www.boost.org/doc/libs/1_55_0/doc/htm

c++ - 永远运行 boost asio io_service

我调用boost::asio::io_service::run()并立即返回,因为它没有工作要做。稍后将有一个不同的线程对工作进行排队,但我不希望run线程退出。解决方案是忙等待运行:while(true)service.run();但是当没有工作可做时,这会浪费CPU。另一种方法是等待每次有东西排队到服务时引发的事件。这种方式存在竞争:如果一个线程停止工作,然后第二个线程发布工作并在第一个线程有机会等待之前引发事件,第一个线程将永远等待。我宁愿避免这种情况,让服务知道什么时候有工作要做。是否可以做类似的事情:while(true){service.wait_for_work();se

c++ - 在 TCP 输入或文件更新上使用 boost :asio with select? 阻塞

我本来打算在我的程序中有一个线程等待两个文件描述符,一个用于套接字,另一个用于描述文件系统的FD(特别是等待查看是否有新文件添加到目录中)).由于我希望很少看到添加的新文件或传入的新TCP消息,因此我希望有一个线程等待任一输入并在它发生时处理检测到的任何输入,而不是用单独的线程来打扰。然后我(终于!)获得了“老板”的许可,可以使用boost。所以现在我想用boost:asio替换基本套接字。只有我遇到了一个小问题。似乎asioimplimented它是自己的select版本,而不是提供我可以直接与select一起使用的FD。这让我不确定如何在新文件和TCP输入这两种情况下同时阻止一个只