我正在尝试了解 boost::asio
库的内部工作,这真的很棒。我编写了一个简单的客户端,它向服务器发送一条消息。
问题是 - 它真正在哪个线程中发送消息?
由于我使用async_write()
方法,它在调用后立即返回并且不发送任何内容。我已经评论了 io_service.run()
方法,之后没有调用处理程序(没关系),但是发送了消息! (我已经在服务器日志中检查过了)
顺便说一下,我不使用-lpthread
,编译时只使用-lboost_system
,所以我假设整个程序在一个线程中工作并且没有“隐藏”线程。
我无法确定消息发送到哪里。
#include <iostream>
#include <boost/asio.hpp>
const std::string str("HELLO!");
int main()
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 33333);
boost::asio::ip::tcp::socket socket(io_service);
boost::system::error_code ec;
boost::asio::connect(socket, &endpoint, ec);
boost::asio::async_write(socket, boost::asio::buffer(str),
[](const boost::system::error_code& ec, std::size_t length)
{
if (!ec)
{
std::cout << "Sent!" << std::endl;
}
else
{
std::cout << "Err: " << ec.message() << std::endl;
}
});
//io_service.run();
return 0;
}
最佳答案
在调用 异步写入
。没有必要推迟,如果它可以在不阻塞调用线程的情况下完成,这通常是可以的。
直到 io_service
运行并收到消息已发送的通知后,才会调用完成处理程序。
关于c++ - 提升::亚西欧。消息在哪个线程中发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24776235/