gpt4 book ai didi

c++ - 如何让 C 或 C++ 程序每 X 秒执行一次特定任务,但仍然在其间执行其他任务?

转载 作者:太空宇宙 更新时间:2023-11-04 05:13:14 25 4
gpt4 key购买 nike

这是我创建的用于说明问题的示例程序。该程序应该每秒打印(计数)自程序启动(或计数器重置)以来的秒数,并每 10 秒打印一个字符串。每 90 秒,应将不同的字符串写入标准输出。但这并不像预期的那样有效,我不确定为什么。

#include <iostream>     // time_t time();
#include <stdio.h> // printf();
#include <time.h>
#include <unistd.h> // sleep();

int main(void) {
time_t task1_time = (time(NULL) + 10); // Saves the time 10 seconds ahead from now!
time_t task2_time = (time(NULL) + 90); // Saves the time 90 seconds ahead from now!

int seconds = 0; // Variable to count seconds.

while (1) {
if (time(NULL) >= task1_time) { // If the time now has caught up with the 10 seconds:
task1_time = (time(NULL) + 10); // Saves the time additional 10 seconds ahead from now!
printf("Task 1 executing!\n"); // Prints a string to stdout.
seconds = 0; // Resets the secondcounter.
}
else {
if (time(NULL) >= task2_time) { // If the time now has caught up with the 90 seconds:
task2_time = (time(NULL) + 90); // Saves the time additional 90 seconds ahead from now!
printf("\nTask 2 executing!\n"); // Prints a string to stdout.
}
}
printf("%d ", seconds); // Prints to stdout the number of seconds that have been counted.
seconds = seconds + 1; // Adds 1 to seconds.
sleep(1); // Wait 1 second.
}
return 0;
}

发生的情况是程序运行了 10 秒没有打印。然后,以下所有短语立即打印到标准输出:

“0 1 2 3 4 5 6 7 8 9 任务 1 正在执行!”

此后的 10 秒内没有任何反应,直到重印相同的短语。事情就是这样。大约 90 秒后,将打印以下短语:

“任务 2 正在执行!”

打印到 stdout 的字符串应该代表在实际应用程序中执行的更现实的任务。我的目的是每隔 10 秒和第 90 秒“中断”程序以执行单独的任务,而程序通常可以继续处理其间的其他事情。我之前已经使用 mbed 微 Controller 实现了这一点,其中所谓的“Tickers”执行此类中断,但我无法找到标准 C 或 C++ 中可用的 Ticker 功能。

我还尝试了另一种方法,将 sleep(1)wait(1) 交换,并将此原型(prototype)添加到代码中:

void wait (int seconds)
{
clock_t end_wait = (clock() + (seconds * CLOCKS_PER_SEC));
while (clock() < end_wait) {}
}

程序行为相同。

Print message every x seconds [duplicate]这个帖子的答案我也研究过,但在我看来,这些解决方案使程序除了在间隔之间等待之外无法做任何其他事情。

几个问题:
问题 1:为什么不是每秒向标准输出输出一个整数,而是同时打印 10 秒前的所有整数?
Q2:这种方法会在等待/休眠时浪费不必要的 CPU 资源吗?

当然还有:
我们将不胜感激所有建议的解决方案和代码示例。

附加信息:适用操作系统:Linux

最佳答案

声明

printf("%d ", seconds);

确实会打印时间,但不会刷新到输出终端。添加调用 fflush紧接着。

关于c++ - 如何让 C 或 C++ 程序每 X 秒执行一次特定任务,但仍然在其间执行其他任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633278/

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