VPS 内核版本较低,低到还没实现 timerfd。由于是 OpenVZ 的方案,基本上是无法更新 Kernel 的。有一个必要应用正好要使用 HevLib 库的 HevEventSourceTimeout,此 source 是基于 timerfd 的,临时的解决方法是使用 HevEventSourceSignal 监听 SIGALRM 信号, 使用 alarm 或 ualaram 设置定时器:
#include <stdio.h> #include <signal.h> #include <hev-lib.h> static bool signal_handler (void *data) { printf ("timeout signal\n"); alarm (1); return true; } int main (int argc, char *argv[]) { HevEventLoop *loop = NULL; HevEventSource *signal = NULL; loop = hev_event_loop_new (); signal = hev_event_source_signal_new (SIGALRM); hev_event_source_set_callback (signal, signal_handler, NULL, NULL); hev_event_loop_add_source (loop, signal); hev_event_source_unref (signal); alarm (1); hev_event_loop_run (loop); hev_event_loop_unref (loop); return 0; } |
Over!