我希望定时运行一个函数,给出一个时间步。最有效的方法是什么?
我知道我可以暂时使用,只是继续检查直到dt时间段过去。但我想知道是否有更好,更有效/更优雅的功能可供使用。
我正在研究虚拟计时器和sigaction。使用这个方法,我会让sigaction处理程序在时间结束时设置一个标志,但我仍然需要坐在while循环中检查是否在我的main函数中设置了该标志。或者我想知道我是否真的可以让处理程序运行该函数,但是我必须传递很多参数,据我所知,处理程序不接受参数,所以我将不得不使用大量的全局变量
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
最简单的方法是使用sleep
中定义的usleep
或unistd.h
。
如果这些都不可用,那么常见的解决方法是在没有文件描述符的情况下使用select
超时。
答案 1 :(得分:0)
在* IX'系统上你可以
SIGALRM
的处理程序,它什么都不做alarm()
pause()
如果发出警报信号,pause()
将返回
pause()
#define _POSIX_SOURCE 1
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
void handler_SIGALRM(int signo)
{
signo = 0; /* Get rid of warning "unused parameter ‘signo’" (in a portable way). */
/* Do nothing. */
}
int main()
{
/* Override SIGALRM's default handler, as the default handler might end the program. */
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = handler_SIGALRM;
if (-1 == sigaction(SIGALRM, &sa, NULL ))
{
perror("sigaction() failed");
exit(EXIT_FAILURE);
}
}
while (1)
{
alarm(2); /* Set alarm to occur in two seconds. */
pause(); /* The call blocks until a signal is received; in theis case typically SIGARLM. */
/* Do what is to be done every 2 seconds. */
}
return EXIT_SUCCESS;
}
答案 2 :(得分:0)
包含time.h并使用像
这样的睡眠功能#include <time.h>
#include <stdio.h>
#include<windows.h>
#include <conio.h>
int main() {
printf("I am going to wait for 4 sec");
Sleep(4000); //sleep for 4000 microsecond= 4 second
printf("Finaaly the wait is over");
getch();
return 0;
}
它将为您提供微秒级别的精确延迟。 希望它有所帮助。