2017-08-25 58 views
2

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

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 
    } 
} 

我该如何去做这件事?

回答

1

今天我有同样的问题。在深入了解源代码之后,我想我找到了答案。

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

+0

这正是我一直在寻找的!我已经用平行线程解决了它,所以我希望他们早些时候添加它:P但是比从未更好。无论如何非常感谢! –