【问题标题】:How to keep track of a timer or alarm or set a trackable timer in C如何在 C 中跟踪计时器或警报或设置可跟踪计时器
【发布时间】:2015-12-05 21:28:03
【问题描述】:
void alarm_handler(int signum){
  printf("Buzz Buzz Buzz\n");

  //set a new alarm for 1 second
  alarm(1);
}

main()
 {
  //set up alarm handler
  signal(SIGALRM, alarm_handler);
  //schedule the first alarm
  alarm(1);
  //pause in a loop
  while(1)
  {
    pause();
  }
}

我有这段代码可以打印出“嗡嗡嗡嗡嗡” 我的问题是......无论如何都要跟踪闹钟的秒数......让我将闹钟设置为闹钟(5)。

我想做的是跟踪这 5 个... 因为它将每 5 秒打印一次..

在第 5 秒,警报会响起,可以调用另一个函数,将全局变量更改为 5,然后返回 0...

我想错了吗...我实现这个想法错了吗?..我看过计时器,但我不太确定如何设置计时器并跟踪计时器...

我的最终任务是每 5 秒打印一次……但最重要的是跟踪警报何时响起。我会使用一个全局变量在那一秒内将其设置为 5,然后将其设置回零..

任何想法..cmets..代码...推动方向非常感谢。 谢谢!

【问题讨论】:

  • printf() 不是异步安全的。

标签: c timer pthreads signals mutex


【解决方案1】:

将闹钟设置为 1 秒并连续执行 5 次?

#include <unistd.h>
#include <signal.h>
#include <stdio.h>

volatile sig_atomic_t secs_to_alarm;
unsigned int secs_to_track;

void setalarm(unsigned int);


void alarm_handler(int signum) {
  write(1, ".", 1); /* Writes a dot to the console every secs_to_track seconds. */
  --secs_to_alarm;

  if (secs_to_alarm)
  {
    setalarm(secs_to_track);
  }
}

void setalarm(unsigned int secs)
{
  signal(SIGALRM, alarm_handler);
  alarm(secs);
}

int main(void)
{
  secs_to_alarm = 5;
  secs_to_track = 1;

  setalarm(sec_to_track);

  while (secs_to_alarm)
  {
    pause(); /* Returns on each signal. */
  }

  printf("\nbuzz, buzz\n");
}

【讨论】:

    【解决方案2】:

    在“C”中测量时间的最简单方法可能是使用'C' time functions

    您可以使用 time() 获取开始时间,然后再次调用 time() 获取当前时间并使用 difftime(now-current) 获取差异。

    您使用全局变量来跟踪计数的概念似乎是合理的。

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多