C ++ uWebSockets在一个线程中集成了事件循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++ uWebSockets在一个线程中集成了事件循环相关的知识,希望对你有一定的参考价值。

我在我的C ++项目中使用uWebSockets,我有自己的自定义事件循环。它是一个while循环,每次执行之间有一个可变的延迟。它看起来像这样:

while (true) {
    std::this_thread::sleep_for (variableTime);
    // Execute logic
}

我之前一直在使用另一个线程来执行逻辑,但我想将uWebSockets循环与我的循环集成。像这样的东西:

#include <iostream>
#include <uWS/uWS.h>

using namespace std;

int main () {
    uWS::Hub h;

    h.onMessage([](uWS::WebSocket<uWS::SERVER> *ws, char *message, size_t length, uWS::OpCode opCode) {
        ws->send(message, length, opCode);
    });

    if (h.listen(3000)) {
        h.run();
    }

    while (true) {
        std::this_thread::sleep_for (variableTime);
        h.getMessages(); // <-- doesn't call `onMessage` until this is executed
        // Execute logic
    }
}

我该怎么做呢?

答案

今天我有同样的问题。经过一些挖掘源代码后,我想我找到了答案。

您正在寻找的是最近添加的(https://github.com/uNetworking/uWebSockets/pull/762)Node :: Poll(Hub继承节点)功能,该功能在程序主循环中无阻塞。我认为它应该像你想到的getMessages一样工作。

以上是关于C ++ uWebSockets在一个线程中集成了事件循环的主要内容,如果未能解决你的问题,请参考以下文章

uWebSockets setUserData 线程安全吗?

从另一个线程向 uWebSockets 0.15.x 套接字发送数据

如何在 qt/c++ 中集成线程

如何在 XAMPP 中集成 sqlite 扩展?

如何在 Angular 7 项目中集成 html 模板

如何在 C# windows 应用程序中集成 matlab 项目