gpt4 book ai didi

c - 在计时器到期之前查找 libevent 计时器中耗时

转载 作者:行者123 更新时间:2023-11-30 15:41:56 25 4
gpt4 key购买 nike

我有一个基本代码,其中有一个启动了 480 秒的 libevent 计时器。经过一段延迟后,在计时器到期之前,我想找到该计时器经过的秒数。

最佳答案

libevent 中没有一个函数可以做到这一点,并且添加一个函数也不是一件容易的事:现在,计时器会记住何时过期,但何时过期它们被添加了。

(如果您想知道计时器何时到期,可以使用 event_pending() 函数获取。)

不过,你可以很容易地伪造它,使用如下(未经测试的)代码:

struct annotated_timer {
struct timeval tv;
struct event *ev;
};

...

struct annotated_timer *
annotated_timer_new(void (*cb)(evutil_socket_t, short, void*), void *arg) {
struct annotated_timer *at;
if (!(at = malloc(sizeof(*at))))
return NULL;
if (!(at->ev = event_new(-1, 0, cb, arg))) {
free(at);
return NULL;
}
return at;
}
void
annotated_timer_add(struct annotated_timer *at, const struct timeval *tv) {
evutil_gettimeofday(&at->tv, NULL);
event_add(&at->ev, tv);
}
int
annotated_timer_get_time_waiting(struct annotated_timer *at, struct timeval *tv_out) {
if (! event_pending(&at->ev, EV_TIMER, NULL))
return -1;

struct timeval now;
evutil_gettimeofday(&now, NULL);
evutil_timersub(tv_out, &now, &at->tv);
return 0;
}

关于c - 在计时器到期之前查找 libevent 计时器中耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com