【问题标题】:Calling a function periodically in C在 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标签标记发帖。

标签: c loops sleep periodic-task


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • (同样在原始 Windows API 中,有一个带有 WM_TIMER 事件的“穷人计时器”,我真的不建议使用它。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多