2017-08-25 56 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但是比從未更好。無論如何非常感謝! –