在 C 中定期调用函数

Posted

技术标签:

【中文标题】在 C 中定期调用函数【英文标题】:Calling a function periodically in C 【发布时间】:2020-09-21 00:31:54 【问题描述】:

我想调用一个函数,该函数在 C 中每 5 秒定期创建文件。 下面是创建文件的函数代码。

void file_create(int time) 
        snprintf(filename, sizeof(filename),"%s_%d", "data", index);
        FILE *fp = fopen (filename, "w");
        index++;

文件名将是 data_0、data_1、data_2,每次调用都会继续。

如果我像下面这样放置一个无限循环,如何从主函数中每隔 5 秒定期调用一次上述函数

while(1)
    file_create();
    Sleep(5000);

这不允许执行while循环下面的行。

如何通过定期调用上述函数而不暂停程序其余部分的执行来实现这一点?

【问题讨论】:

您考虑过使用单独的线程还是必须在同一个线程中? 你知道timerfd_create吗? @Milag 大写表示 Windows 和 Microsoft 的 C lib 以及 Windows API。 Glibc 将不可用。 每个人都说多线程,但你也可以使用事件循环。这也是很大的话题。查找 libuv。 请用windows标签标记发帖。 【参考方案1】:

您正在寻找多线程系统。您必须创建一个执行上述 while 循环的任务和另一个执行当前程序其他部分的任务。

【讨论】:

【参考方案2】:

您可以使用多线程来执行此操作,这本身就是一个很大的话题。我建议先研究 POSIX 线程 (pthreads) 的工作原理。

在 Windows 中,这意味着线程应该等待自定义事件“关闭线程”5000 毫秒。如果您收到事件,请停止线程。否则在超时的情况下,执行周期性任务。 Windows 使用与 POSIX 不同的线程 API。

还有不同的 Sleep(ms) (Windows) 与 sleep(s) (POSIX) 函数......

【讨论】:

(同样在原始 Windows API 中,有一个带有 WM_TIMER 事件的“穷人计时器”,我真的不建议使用它。)

以上是关于在 C 中定期调用函数的主要内容,如果未能解决你的问题,请参考以下文章

需要定期暂停 Carousel 动画并调用一个函数

在angularjs的后台定期调用服务器上的函数

在 Fortran 派生类型中保存指向 C 函数的指针

PHP常用原生函数总结(不定期更新)

使用 setTimeout 定期进行自动完成 AJAX 调用?

C语言中,是不是可以调用其它文件的函数?