我想在几秒钟内的某个特定时间执行两个不同的输出,一个接一个。并使用keyEvent更改交换时间。这是主意。
[Every 10 seconds]
1 2 3 4 5 6 7 8 9 (10) 11 12 13 14 15 16 17 18 19 (20) (→ second-from timer lib.)
Display Output 1 = 1-10 second
Display Output 2 = 11-20 second, (then Output 1 again, etc)
[Every 5 seconds]
1 2 3 4 (5) 6 7 8 9 (10) 11 12 13 14 (15) 16 17 18 19 (20)(→ second-from timer lib.)
Display Output 1 = 1-5 second
Display Output 2 = 6-10 second
Display Output 1 = 11-15 second, (then Output 2 again, etc)
我一直在寻找问题,例如Timed C Program Loop和How to use seconds (time) in C program as a counter?,但我只发现了带有timer和clock_t的问题。我不打算使用计时器和时钟,因为我已经使用了utilTimer库来实时返回秒数。 这是我的keyEvent代码:
if (key == '1' ) {
delay=10;
}
if (key == '2' ) {
delay=5;
}
if (key == '3' ) {
delay=3;
}
if (key == '4' ) {
delay=1;
}
如何实现时间循环?到目前为止,对于循环,我正在使用mod,但是使用mod时,输出值仅在满足mod时才执行一次。另外,由于我正在实时运行,因此很难设置循环的最大值。因此,我仍然有些困惑,还没有实现我的目标。
for (int count = 0; true; count++) {
if (count % delay == 0) {
//push output 1 every defined delay - in seconds
}
else {
//push another output
}
}
有什么建议吗?
[编辑]
我在Mac上运行一个简单的C程序。基本上,我想做的是在这种情况下要推送输出字符串输出和图像,因此几秒钟后字符串和图像将反复更改。而且我希望能够使用键控制变化的频率。
答案 0 :(得分:1)
您需要跟踪上次更改图像和字符串的时间。然后,从当前时间中减去最后一个时间,如果差异大于延迟,则输出新的图像和字符串,然后将最后一个时间变量更新为当前时间。
如果为计时器使用无符号值,则翻转不会有麻烦(对于有符号整数会溢出,并导致未定义的行为)。
unsigned now; // from your timer
unsigned last_event; // the last time you sent stuff out
unsigned delay; // the time between output events
while (1)
{
if ((now - last_event) >= delay)
{
// send out your string and image
last_event = now;
}
else
{
// keep waiting, and do whatever else you want
// update now as appropriate from timer
}
}
我在上面使用while (1)
的目的是传达这样一个想法,即while
循环内的代码经常执行。实际上,这不是必须的,也可能不是while
循环。可能是
答案 1 :(得分:0)
如果我理解正确的问题,则可以在for循环中使用sleep
。它在unistd.h库中。
#include unistd.h
for (int count = 0; true; count++) {
sleep(1000); //sleep for 1 second
if (count % 10 == 0) {
//every 10 seconds
}
if (count % 5 == 0) {
//every 5 seconds
}
}