草庐IT

index-async

全部标签

c++ - 未调用 boost SSL async_shutdown 完成处理程序

我将boost1.54.0与OpenSSL1.0.1e结合使用。不时关闭SSL连接对象时,我会看到async_shutdown()的完成处理程序不被调用。调试后我发现,当存在超出async_write()时会发生这种情况。SSLasync_shutdown()应该发送SSLAlert(Closing),因此我们这里有2次写入。我知道多个async_write()是被禁止的。我应该如何处理这种情况?我应该在调用SSLasync_shutdown()之前等待async_write()完成吗?编辑:根据this我可能需要在底层TCP套接字上使用cancel()来取消所有未完成的异步操作。是否

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::multi_index for Python

我非常欣赏C++中的boost::multi_index。碰巧我很乐意在Python中使用类似的东西;用于处理来自数字密集型应用程序的数据的脚本。Python有这样的东西吗?我只是想确定它不存在,然后我会尝试自己实现它。不适合我的事情:用Python包装boost::multi_index。它根本无法扩展。在内存中使用sqlite3。它很丑。 最佳答案 由于python集合仅存储对对象的引用,而不是对象本身,因此具有多个索引方案的一个集合与仅具有多个集合之间没有太大区别。例如,您的数据可以有多个字典,每个字典都使用不同的键来引用它们

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++ - std::async 参数的生命周期是多少?

似乎通过std::async执行的函数的参数共享future的生命周期:#include#include#includestructS{S(){std::cout结果:enterscope++S()138054661364main'svariable|S(&&)138054661108++std::async'sinternalcopy+--+S(&&)138054659668|std::async'sinternalcopy||S(&&)138054922824+--+func'sargument+--+~S()138054659668|||~S()138054661108++||f

c++ - 带有 C++ 的 Lua 脚本 : attempt to index global 'io' (a nil value)

我打算使用luafoAI编写一个程序,所以我试图让它一起工作。但是当我尝试从我的cpp文件加载lua脚本时,我收到了这个错误消息:--toto.lua:1:attempttoindexglobal'io'(anilvalue)这是我的lua脚本:io.write("运行中",_VERSION,"\n")这是我的cpp文件:voidreport_errors(lua_State*L,intstatus){if(status!=0){std::cerr非常感谢。 最佳答案 你不应该直接调用luaopen_*函数。使用luaL_openl

c++ - 提升 : is it safe to use multiple recursion in async calls?

我是asio框架的新手,所以请多多关照。我调查了几个boostasio示例,发现人们使用这样的异步调用:voidread(){async_read(socket_,boost::asio::buffer(&user_[0],user_.size()),boost::bind(&Connection::handle_user_read,this,placeholders::error,placeholders::bytes_transferred));}voidhandle_user_read(...){...read();...}我认为这段代码不安全,因为它使用了多重递归。所以当因为调

c++ - 使用 std::async 准备就绪后立即显示结果

我正在尝试探索C++中的异步编程。这是我一直在使用的玩具示例:#include#include#include#include#include#include//Forsimplicityusingnamespacestd;intcalled_from_async(intm,intn){this_thread::sleep_for(chrono::milliseconds(rand()%1000));returnm*n;}voidtest(){intm=12;intn=42;vector>results;for(inti=0;i现在,这个例子并不是很有趣,但它提出了一个对我来说很有趣的

c++ - 如何在不删除元素并将其重新插入到 boost::multi_index_container 的情况下移动元素?

我正在使用boost::multi_index_container提供对元素集合的随机访问和基于散列的访问。我想更改元素的随机访问索引,而不更改基于哈希的索引。这是一段代码:#include#include#include#include#includeusingnamespacestd;usingnamespaceboost;usingnamespaceboost::multi_index;//classrepresentingmyelementsclassElement{public:Element(conststring&new_key):key(new_key){}string

c++ - 如何保持 boost asio async 连续读取事件

我正在构建一个tcp客户端,它必须发送请求和读取响应,而且还必须能够检测来自tcp服务器的不是对请求的响应的传入数据-服务器可以发起tx/rx序列。保持异步读取始终处于事件状态的最佳方法是什么。我尝试了以下方法:在我的“handle_connect”方法中,我开始异步读取和异步写入。异步读取看起来像这样:size_tbytes_transferred=BUFFER_SIZE;boost::asio::async_read(m_socket,boost::asio::buffer(rcvbuf,bytes_transferred),boost::bind(&CClientSock::ha