asio

ASIO库使用注意事项

时光怂恿深爱的人放手 提交于 2019-11-27 12:11:01
1. 使用 io_ service::work 实现 io_service 无任务时不退出 正常情况下向io_service抛任务,它执行完成后就会自动退出,而要实现那种chromium那种的循环队列,没有任务就等待任务的效果,可以使用io_service初始化一个 io_ service::work ,只要这个work没有被析构,那么service就不会主动结束。 但是在要销毁service时,要想让它完全退出,需要先将work销毁,再等待service内还在执行的任务执行完成,service才能完全结束。 写asio程序最容易碰到的就是程序无法结束,根源就在于使用的io_service一直没有结束。未超时的timer、还在活跃中的socket等,都需要手动结束或释放,service才能正常退出。 2.指定网卡加入组播 服务端: asio::ip::udp::endpoint listenEndpoint(asio::ip::udp::v4(), _multiCastPort); _listenSocket.open(listenEndpoint.protocol()); _listenSocket.set_option(asio::ip::udp::socket::reuse_address(true)); _listenSocket.set_option(asio::ip:

How to set error_code to asio::yield_context

倾然丶 夕夏残阳落幕 提交于 2019-11-27 06:35:10
问题 I'd like to create an asynchronous function which takes as it's last argument boost::asio::yield_context. E.g.: int async_meaning_of_life(asio::yield_context yield); I'd also like to be consistent with how Asio returns error codes. That is, if the user does: int result = async_meaning_of_life(yield); and the function fails, then it throws the system_error exception. But if the user does: boost::error_code ec; int result = async_meaning_of_life(yield[ec]); Then - instead of throwing - the

Boost学习手册

不打扰是莪最后的温柔 提交于 2019-11-27 05:36:04
boost::optional usage boost::property_tree usage boost::asio boost::asio::io_service boost::asio::io_ service::post () and boost::asio::io_ service::dispatch () post 优先将任务排进处理队列,然后返回,任务会在某个时机被完成。 dispatch会即时请求io_service去调用指定的任务。 boost::asio::io_context concept usage boost::asio::io_context::strand concept 类boost::asio::io_context::strand的主要作用是在asio中利用多线程进行事件处理的时候,如果涉及到多线 程访问共享资源,借助于strand类,我们不需要显示的使用线程同步相关的类(比如mutex)就可以让多个事件 处理函数依次执行。 strand定义了事件处理程序的严格顺序调用。 注解描述为:提供串行化的处理调用,strand提供串行执行, 能够保证线程安全, 同时被post或dispatch调用的方法, 不会被并发的执行。 usage boost::asio::io_context::strand m_strand; m_strand

How to record and playback with NAudio using AsioOut

丶灬走出姿态 提交于 2019-11-26 21:45:35
问题 I'm trying to get the sound input and send output directly with less latency possible with C#. I'm using the library NAudio that supports ASIO for better latency. In particular, I use the AsioOut object for recording and another for playback initialized with a BufferedWaveProvider , which is filled in a Callback function: OnAudioAvailable , which allows me to use the ASIO buffers. The problem is that I hear the sound with various glitches and with a bit of delay . I think the problem is in

用string存取二进制数据【转】

时间秒杀一切 提交于 2019-11-26 18:32:04
原文:http://www.cnblogs.com/MikeZhang/archive/2012/09/30/stringOptBin20120930.html STL 的 string 很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用 string 存取二进制数据的问题,这里记录一下,以供以后参考。 首先提一下 STL 中 string 的参考资料: http://www.cplusplus.com/reference/string/string/ , 不懂的朋友可以看下。 在数据传输中,二进制数据的 buffer 一般用系统预设的大数组进行存储,而不是 STL 的 string 等,比如: const int max_length = 1024 * 1024 ; unsigned char data[max_length]; 因为二进制数据中可能会包含 0x00 (即: '\0' ),刚好是字符串结束标志…… 如果我们的代码是如下写的: char data[max_length]; size_t length = sockClient.read_some(boost::asio::buffer(data), ec); string strData(data); 我只能说,这个处理字符串应该没问题,如果是二进制的话,会被 string 的构造函数给截断一部分,导致

Boost.asio 常用函数用法 (自用)

回眸只為那壹抹淺笑 提交于 2019-11-25 19:29:31
目录 头文件 常用类 常用函数 ps:适合有一点点基础的看,什么都不知道的不太看得懂 头文件 # include <boost/bind.hpp> // 绑定handler用 # include <boost/asio.hpp> // 必要,使用asio库 # include <boost/smart_ptr.hpp> // 自带的智能指针 常用类 boost :: asio :: ip :: tcp :: io_service ioService ; // io服务 基本是必要的,博主理解不到位,以后或会跟新原因 boost :: asio :: ip :: tcp :: endpoint endpoint ( boost :: asio :: ip :: tcp :: v4 ( ) , 5000 ) // 5000端口号,别写1024以内的就好,1024以内属于系统端口 boost :: asio :: ip :: tcp :: socket socket ( ioService ) ; // 构造时传入io_service boost :: asio :: ip :: tcp :: acceptor acceptor ( ioService , endpoint ) ; // 接受器,可以理解为服务端使用,用于被别人连接 boost :: system :: error