c++ - 提升::亚西欧。消息在哪个线程中发送?

标签 c++ multithreading boost-asio

我正在尝试了解 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/

相关文章:

c++ - 线程性能基准测试

c++ - 有没有办法让 GDB 打印一些东西告诉我一行已经执行,而不停止?

c++ - asio::streambuf 优于原始数组的优势

c++ - Boost Asio - 消息内容传输错误

c++ - boost Asio : Some questions about the tutorial (A synchronous daytime server/client)

c++ - 将对象移动到 vector c++ 的前面

C++:将子类转换为父类时失去对子类成员的访问权限

c++ - 调试器在编译内联汇编代码时打开

java - 一次运行多线程并让线程快速运行?

c++ - std::ignore 的要求