小编bud*_*888的帖子

重复timerfd事件适用于epoll而不是poll

我正在使用timerfd 实现一个计时器。这是一个相对计时器,我只需要按照设置的速率永远重复。我想对这个事件进行轮询,最初尝试使用轮询。当我这样做时,我会第一次看到计时器事件,然后就再也看不到了。但是,当我更改为使用 epoll(timerfd 的设置方式完全没有改变)时,它按预期工作。

这是带有轮询的代码:

#include <sys/timerfd.h>
#include <sys/poll.h>
#include <sys/epoll.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>

int main(int ac, char *av[])
{
    struct pollfd p;
    int timerfd;
    struct itimerspec timerValue;

    /* clear pollfd */
    bzero(&p, sizeof(p));

    /* set timerfd */
    timerfd = timerfd_create(CLOCK_REALTIME, 0);
    if (timerfd < 0) {
        printf("failed to create timer fd\n");
        exit(1);
    }
    bzero(&timerValue, sizeof(timerValue));
    timerValue.it_value.tv_sec = 1;
    timerValue.it_value.tv_nsec = 0;
    timerValue.it_interval.tv_sec = 1;
    timerValue.it_interval.tv_nsec = 0;

    /* set events */
    p.fd = timerfd; …
Run Code Online (Sandbox Code Playgroud)

c linux timer polling

3
推荐指数
1
解决办法
5106
查看次数

标签 统计

c ×1

linux ×1

polling ×1

timer ×1