REACT-CPP 是利用 C++ 11 的 lambda 表达式在文件描述符或定时器激活的时候进行通知的事件循环库。在它内部实质是对 libev 库的包装,因此也依赖于该库。
在一个典型的应用程序中,你创建了一个 mainloop 类的实例,然后注册你想要查看的 filedescriptors,注册事件处理程序和计时器:
#include <reactcpp.h> #include <unistd.h> #include <iostream> /** * Main application procedure * @return int */ int main() { // create an event loop React::MainLoop loop; // set a timer to stop the application after five seconds loop.onTimeout(5.0, []() { // report that the timer expired std::cout << "timer expired" << std::endl; // stop the application exit(0); }); // we'd like to be notified when input is available on stdin loop.onReadable(STDIN_FILENO, []() -> bool { // read input std::string buffer; std::cin >> buffer; // show what we read std::cout << buffer << std::endl; // return true, so that we also return future read events return true; }); // handler when control+c is pressed loop.onSignal(SIGINT, []() -> bool { // report that we got a signal std::cout << "control+c detected" << std::endl; // stop the application exit(0); // although this code is unreachable, we return false because // we're no longer interested in future SIGINT signals return false; }); // run the event loop loop.run(); // done return 0; }