草庐IT

asio_handler_invoke

全部标签

c++ - 使用 Boost::Asio 停止线程服务器循环

我正在为一个更大的软件开发一个微型服务器循环,但它并没有像我希望的那样工作。当用户输入“.quit”时,我希望软件停止这个线程服务器循环:try{while(true){acceptor.accept(socket);constsize_tbuffersize=1024;chardata[buffersize+1]={0};data[socket.read_some(boost::asio::buffer(data,buffersize))]='\0';//Writedata&placeterminatorboost::threadasyncWriting(boost::bind(&m

c# - 从 C++ ASIO 库用 C# 录制音频流

我需要找到录制音频流的最佳方式。我已经用C++构建了低级代码并将其部分接口(interface)连接到C#。所以我有一个C++回调,它为我提供了一个float组——音频信号。目前,我的C++库正在将数据直接记录到wav格式的文件中,它只是在结束记录时通知我的C#应用程序。但是,我希望在UI方面有更多的交互性,比如“无限”进度条、记录的数据量、取消按钮等,因为最坏的情况下也需要一分钟,也许最好保留它在内存中。我对.NET和C#内存管理知之甚少,所以我不知道如何有效地实现它。C#中是否有任何可快速调整大小的容器,我可以将数据放入其中,然后像访问数组一样访问它?我还想根据它构建一个波形图像。

c++ - boost asio : different thread pool for different tasks

网络上有很多关于创建简单线程池的示例,例如Sample1和Sample2虽然我想要实现的是为不同的任务提供一个单独的线程池。例如,应用程序可能有一个线程池用于处理传入的tcp连接(我们称之为网络池),而另一个线程池用于与数据库(数据库池)对话。这些传入的tcp请求可能需要来自数据库的信息。在这种情况下,它需要请求数据库池中的那些线程执行查询,并异步返回结果。是否有使用boost::asio的推荐方法?每个池都有一个io_service实例吗?这些线程应该如何相互通信(使用boost)?我明白要解释所有这些,代码不会那么短和琐碎,但如果可能的话,一些伪代码将不胜感激。谢谢!

c++ - Boost::Asio,SSL 连接问题

几天来我一直试图解决我的问题,但就是无法解决问题。我尝试使用Boost::Asio库和OpenSSL建立SSL连接。有一个示例代码,如何执行此操作:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp03/ssl/client.cpp它构建和运行良好,甚至验证似乎也有效,但是当我发送一个简单的请求时,很长一段时间没有任何反应,然后我收到一条错误消息:“读取失败:短读取”。我想,我只是把请求行本身做错了,但我不知道它是怎么回事。我尝试了以下两行:GET/HTTP/1.1Host:www.google.de

c++ - 提升 asio 同步与异步操作性能

这有点类似于boost::asioasyncperformance.由于该问题没有确定的答案,我发布了一个类似的问题,其中包含示例代码和统计数据来证明该问题。下面,我对同步和异步服务器应用程序进行了示例,它们在一个循环中连续向客户端发送25字节的消息。在客户端,我正在检查它能够以什么速率接收消息。示例设置非常简单。在同步服务器的情况下,它会为每个客户端连接生成一个新线程,并且该线程会循环发送25字节的消息。在异步服务器的情况下,它也会为每个客户端连接生成一个新线程,并且该线程使用异步写入在循环中不断发送25字节的消息(主线程是调用ioservice.run()).对于性能测试,我只使用

c++ - boost asio 中的并发读取和 async_read_some

假设在boost::asio中的套接字上启用了async_read_some服务,如果在同一套接字上调用阻塞读取会发生什么情况?一段伪代码如下:usingboost::asio::local::stream_protocol;boost::asio::io_serviceio;stream_protocol::sockets(io);s.connect(stream_protocol::endpoint(address));s.async_read_some(aBuffer,aCallback);//startasync_readboost::threadthread(boost::b

c++ - 如何将 boost::asio::tcp::io_stream 附加到我的 io_service?

我习惯使用boost::asio::ip::tcp::socket我在哪里construct他们用io_service.这很有用,因为我有一个用于所有套接字的io_service,并且这些套接字共享一个线程池。现在,我正在尝试使用boost::asio::ip::tcp::io_stream,我希望它在同一个线程池中执行所有异步工作。但是,似乎不可能construct带有外部io_service的tcp::io_stream。底层套接字确实使用了内部初始化的io_service。有没有办法让我继续使用集中管理的io_service和tcp::io_stream?我使用的是boost版本

c++ - 链接 boost.asio

我在链接boost.asio时遇到问题。它使用boost.system并且链接器错误以:/boost_1_39_0/boost/system/error_code.hpp:205:对`boost::system::get_system_category()'的undefinedreference这意味着我需要链接boost.system。我已经构建了boost,现在我有几个lib文件。boost_system-mgw32-d-1_39.dll和库libboost_system-mgw34-d-1_39.liblibboost_system-mgw34-mt-d-1_39.liblibb

c++ - 我如何强制 boost::asio 优先完成 async_write 调用而不是运行其他处理程序?

我正在使用boost::asio(不经意的传输方案)实现一组简单的协议(protocol)。这些在运行时受CPU限制。为了boost效率,我想尽量让两台主机都工作。如果主机A可以在执行两项任务之间做出选择,其中一项会让主机B开始计算,而另一项则不会,我希望主机A选择前者。目前,io_service在async_writes之前运行计算密集型处理程序。除非tcp窗口已满(或某些类似情况正在阻止向socker写入数据),否则完成async_write比运行其他处理程序几乎肯定更好。我看过asio的处理程序优先级队列示例。重新实现async_write以使用这样的优先级队列是解决我的问题的唯

c++ - boost::asio 在线程中启动不同的服务?

似乎所有示例总是显示在所有线程中运行相同的io_service。可以启动多个io_services吗?这是我想做的:在处理用户输入的主线程中启动io_serviceA...在另一个线程中启动另一个io_serviceB,然后可以启动一堆worker线程都共享io_serviceB。io_serviceA上的用户可以“发布”io_serviceB上的工作,以便它在工作池上完成,但io_serviceA(即主线程)上不会完成任何工作。这可能吗?这有意义吗?谢谢 最佳答案 根据我的经验,如果每个cpu一个io_service或每个进程一个