【问题标题】:Anything similar to QSocketNotifier in boost::asio?boost::asio 中有什么类似于 QSocketNotifier 的吗?
【发布时间】:2014-09-08 12:15:32
【问题描述】:
SOCKET sock = generate_socket("fileWizard");
notifier = new QSocketNotifier(sock, QSocketNotifier::Read, this);

connect(notifier, SIGNAL(activate(int)), this, some_slot(int));

SOCKET是一个win32 SOCKET,“generate_socket”的功能是创建一个socket连接到一个名为“fileWizard”的本地exe(不知道函数generate_socket的实现细节)。 使用Qt,我们总是生成socket并连接信号和槽,但是在asio中找不到类似的例子。

对socket和asio还不熟悉,请告诉我你需要什么信息。谢谢

编辑:

代码的作用是监控SOCKET,如果有任何变化,就会回调。

类似asio(Daytime.3 - An asynchronous TCP daytime server)的例子 让我困惑的部分是

1:如何将 SOCKET 转换为 boost::asio 套接字之一?

2:如何监控socket(我们前辈称之为文件描述符)的“变化”(任何可以读取的)?通过read_async?

【问题讨论】:

  • 也许你可以说出这一切的作用。 Win32 确实有套接字,但它们没有命名(即命名管道,类似于 UNIX 域套接字)。此外,connect(notifier, SIGNAL(activate(int)), ... 这行对于不太了解 Qt 的 Asio 专家来说意义不大。也许您可以解释您想要实现的目标,而不是在没有上下文的情况下提出不可能的“为我翻译这段代码”的谜语?
  • @sehe 谢谢你的建议,对不起我的无知。我做了一些编辑,希望这能让我的问题更容易理解

标签: c++ qt sockets boost boost-asio


【解决方案1】:
  1. Boost.Asio 套接字支持通过重载的构造函数在现有本机套接字之上创建。例如,this 构造函数可用于在现有本机套接字之上构建basic_stream_socket,例如 Windows SOCKET
  2. 虽然 Boost.Asio 不提供直接等效于 Qt 的 QSocketNotifier 类,但 Boost.Asio 通过使用 null_buffers() 确实支持 reactor-style operations。这两种方法都允许在事件发生时通知应用程序,例如当数据准备好从文件描述符中读取时。此事件通知功能允许每个事件循环与其他事件循环或第三方库集成。有关使用 null_buffers() 的完整示例,请参阅官方 Boost.Asio non-blocking example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2016-02-15
    • 2021-03-01
    • 2015-04-27
    • 2018-11-27
    相关资源
    最近更新 更多