gpt4 book ai didi

使用 time 和 difftime 创建超时

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:59 24 4
gpt4 key购买 nike

gcc (GCC) 4.6.0 20110419 (Red Hat 4.6.0-5)

我正在尝试获取开始时间和结束时间。并找出它们之间的区别。

我的功能是为我们现有的硬件创建 API。

API wait_events 采用一个参数,即以毫秒为单位的时间。所以我试图在 while 循环之前开始。并使用时间来获取秒数。然后在循环的 1 次迭代后得到时间差,然后将该差与超时进行比较。

非常感谢您的任何建议,

/* Wait for an event up to a specified time out.
* If an event occurs before the time out return 0
* If an event timeouts out before an event return -1 */
int wait_events(int timeout_ms)
{
time_t start = 0;
time_t end = 0;
double time_diff = 0;
/* convert to seconds */
int timeout = timeout_ms / 100;

/* Get the initial time */
start = time(NULL);
while(TRUE) {
if(open_device_flag == TRUE) {
device_evt.event_id = EVENT_DEV_OPEN;
return TRUE;
}
/* Get the end time after each iteration */
end = time(NULL);
/* Get the difference between times */
time_diff = difftime(start, end);
if(time_diff > timeout) {
/* timed out before getting an event */
return FALSE;
}
}
}

调用的函数是这样的。

int main(void)
{
#define TIMEOUT 500 /* 1/2 sec */
while(TRUE) {
if(wait_events(TIMEOUT) != 0) {
/* Process incoming event */
printf("Event fired\n");
}
else {
printf("Event timed out\n");
}
}

return 0;
}

=============== 编辑更新结果 ==================

1) With no sleep -> 99.7% - 100% CPU
2) Setting usleep(10) -> 25% CPU
3) Setting usleep(100) -> 13% CPU
3) Setting usleep(1000) -> 2.6% CPU
4) Setting usleep(10000) -> 0.3 - 0.7% CPU

最佳答案

你把它复杂化了 - 简化了:

time_t start = time();
for (;;) {
// try something
if (time() > start + 5) {
printf("5s timeout!\n");
break;
}
}

time_t 通常应该只是一个 intlong int,具体取决于您计算自 1970 年 1 月 1 日以来的秒数的平台。

边注:

int timeout = timeout_ms / 1000;

一秒由 1000 毫秒组成。

编辑 - 另一个注释:您很可能必须确保其他线程和/或事件处理可以发生,因此包括某种线程不活动(使用 sleep()nanosleep() 或其他)。

关于使用 time 和 difftime 创建超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836256/

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