增强异步插座和Boost ::线程
boost async sockets and boost::thread
i编写TCP客户端,该客户端应该能够同时发送和接收数据。您能告诉我如何调用async_send
,async_receive
是单独的线程?
换句话说如何调用
m_Socket.async_send(boost::asio::buffer(txBuf.c_str(), txBuf.length()+1),
boost::bind(&TCPClient::sendingHandler, this, boost::asio::placeholders::error));
m_Socket.async_receive(boost::asio::buffer(rxBuf, maxBufLen),
boost::bind(&TCPClient::sendingHandler, this, boost::asio::placeholders::error));
在
中boost::thread receivingThread(boost::bind(...));
boost::thread sendingThread(boost::bind(...));
,如果我再次在处理程序内再次致电async_send
或async_receive
,它会正确工作吗?我需要一个不定式的循环来发送/收款数据。
主要思想是 - 在2 io_service's
上的 TCPClient::sendingHandler/receivingHandler
中发送和接收。此io_service's
在2个线程中被称为 -
boost::thread receivingThread(boost::bind(...));
boost::thread sendingThread(boost::bind(...));
在本教程中清楚地看到了这个想法。您要致电并使用2个单独的io_service's
的唯一区别。
另一个选项是1 io_service
,而乘线乘以调用 io_service::run
。但是您必须使用boost::asio::strand
远线安全:
boost::asio::strand* _strand = new boost::asio::strand(io);
//then use it in handlers
boost::asio::async_read(*socket,
boost::asio::buffer(msg.data(), result.size),
(*_strand).wrap(
boost::bind(&ConnectionInterface::parsePacket, shared_from_this(), boost::asio::placeholders::error)));
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::文件系统::recursive_directory_iterator多线程安全
- 将更高的优先级设置为 boost::asio 线程处理进程
- 如何正确取消析构函数中的 Boost deadline_timer(在多线程环境中)?
- boost信号和插槽在不同的线程中不工作(使用boost::asio::io_service)
- BOOST线程:线程还是进程
- C++boost,等待来自不同线程的varinit
- 如何解决传递给boost线程的函数中的歧义
- 调用boost.asio的异步函数时,线程是什么时候创建的
- cpp 为什么 boost::线程内部的循环不遍历所有值并且推送相同的值?
- 如何使用boost.thread运行多个接收器,每个线程应该分配给每个接收器?
- 使用Boost将单线线程转换为多线程
- C 带有两个线程的boost async_read vs
- 重写多线程事件驱动的C 程序以使用单线程Boost :: Asio
- 多个boost io_service在单独的线程上用于多个网卡
- 在具有许多内核的计算机上,使用 Boost ASIO 只能使用 1 个线程
- 我们是否需要每个线程多个io_service用于具有单个接受器的线程 boost::asio 服务器
- 如何实现动态线程 Boost::Barrier
- 线程+ boost::函数中的getline访问冲突
- 使用c++线程/ boost线程的有效方法