- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习使用 ASIO 库,我正在尝试在异步读取后启动自定义处理程序。
void myConnection::start()
{
conSocket.async_read_some(asio::buffer(conIOBuf),
[this](const std::error_code error, std::size_t length)
{
std::cout << "LOG: Starting Callback\n";
myQStrand.post(
[this, &error]
{
pushToMyQ(privateQ, error);
});
});
}
我已经使用 gdb 来调试可执行文件,但是当我运行它时,我在代码的 pushToMyQ 行遇到了段错误。我已经检查了 error 和 privateQ,它们都有有效的地址,并且在调用它们的成员函数时它们可以工作。
myConnection 是纯虚拟父类的子类,以保持另一个类之间的命名和一些访问器不变。 privateQ 由管理器类持有,该管理器类通过引用 myConnection 传递队列,后者将其作为私有(private)成员持有。
是什么导致在执行 pushToMyQ 的行的 lambda 中发生段错误?
最佳答案
您将对本地(错误
)的引用传递给异步任务。那可不行。
异步任务还保存了一份this
,它可能在异步任务执行时不存在(我们无法知道,因为没有显示周围的代码)
关于c++ - ASIO (C++ 11) strand.post 在使用私有(private)成员函数时导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937002/
strand::wrap() 的行为被定义为它创建一个仿函数,该仿函数将在调用时执行 strand::dispatch()。我最近在我们的一个执行以下序列的应用程序中遇到了一个错误: my_great
strand::post() 和 strand::wrap() 之间的性能差异是什么?使用 strand::wrap() 时关于竞争条件的故事是什么? 最佳答案 只是为了澄清,strand::wrap
如果有一个通用方法接受一些处理程序: template void Register( HandlerType && handler ) { m_handler( std::forward( h
由于最新版本的 boost,asio 推出了新的执行器并提供了 asio::strand .所以现在完全可以使用 asio::strand而不是 io_context::strand .但它们不能互换
我有一份 asio::io_service::strand . 复制的链及其源是不同的执行者吗?换句话说,传递给复制链的函数和传递给源链的另一个函数是否可能由两个不同的线程同时执行? 或者这两个分支在
我必须开发一个与服务器对话的异步客户端。客户端在与主应用程序不同的线程中运行,并使用回调链读取服务器发送的内容。每个读取处理程序通过一个链注册下一个(它有点复杂,因为我使用类方法作为回调,所以我需要绑
我对使用 strand::wrap 和 strand::post 发帖之间的区别感到迷惑不解?似乎两者都保证序列化,但是如何使用 wrap 序列化而不获得一致的顺序?似乎他们都必须做同样的事情。我什么
在this blog post (2010) ,有人试图使用 Boost::strand 工具解决生产者/消费者问题。我感觉他没有捕获要点,他的程序从来没有同时运行一些生产者和一些消费者,但我不是 b
我有一个关于什么在 strand 中运行,什么不运行的问题。我已经阅读了关于 SO 的帖子以及 strand 的文档,但我想确保我已经正确理解了它与下面代码的关系。 下面的类是一个 tcp 客户端,它
我正在尝试将一些事件处理程序存储在数组中。其中一些被 boost::strand::wrap 包裹。 boost::function proc_handlers[] = { boost::bi
我编写此服务器代码已有一段时间了。我从超过 1 个线程调用 io_service::run,但我不确定我是否需要在这里使用 strand。因为我从不多次调用 async_read 。如果其他连接需要向
这是我的代码: void client_connection::serve() { asio::async_read(this->socket_, asio::buffer(&buffer_,
我正在编写一个程序,将读取的数据转发给另一个对等点。我有一个在每次读取套接字上的数据后调用的方法。此方法将数据发布到一个链中以将其写回另一个对等点。当发送大块数据时,应用程序发回的数据与接收到的数据不
我最近使用了 boost::asio::strand。我对此没有经验。 如果我用 strand::wrap() 调用 function1 并用 调用 function2 ,我遇到了什么~functio
我想在我的代码中添加一个运行时断言,以检查代码是否受到给定链的保护。 这是一个伪例子: ... asio::io_service my_io_service; asio::strand my_stra
看了boost::asio的文档,还是不清楚什么时候需要用asio::strand。假设我有一个使用 io_service 的线程,那么按如下方式在套接字上写入是否安全? void Connectio
boost::asio 库提供了一个有趣的同步模型,使用“strands”来序列化对通常需要锁的资源的访问。这实际上通过将每个锁定操作转变为入队来 boost 并行性。 搜索“strands”只会产生
asio::async_write(m_socket, asio::buffer(buf, bytes), custom_alloc(m_strand.wrap(cus
我使用的是最新的 ASIO 版本(目前为 1.18.0)。目前正在设计一个带有定时器(用于超时)的多线程异步 TCP 服务器。我有一个 io_context 有多个线程调用它的 run() 函数。我接
在 Java 中我们有“线程”,在 CPython 中我们有线程(非并发)和“进程”。 在 JS 中,当我启动一个 async 函数或方法时,我如何正式引用这些“执行代码链”? 我听说每个这样的代码块
我是一名优秀的程序员,十分优秀!