【发布时间】:2020-04-03 17:12:22
【问题描述】:
让我们考虑一个像铁人三项这样的多项运动赛事。在这种情况下,当一个人完成一项活动(跑步、游泳、骑自行车等)后,他们会立即开始一项新活动。假设我有一个设备可以持续监控人的活动。如果您看到代码,在“main()”函数中,易失性变量“activity”从设备获取输入。 比赛于 2 小时前开始。
我的目标是找出该人从多长时间到当前时刻处于该特定活动中。假设从过去 1000 秒开始,这个人正在进行跑步活动,而之前他/她正在“骑自行车”(这在一般情况下可能是任何事情)。还有就是,前一个activity的结束时间就是当前activity的开始时间。
“triathlonTim()”函数每 1 秒连续调用一次。当我根据我的代码计算时间时,结果是 1 秒,但实际上应该是 1000 秒。这里,time(NULL) 和“stateTim”不断更新。 “StateTim”变量只能在人停止一项活动并开始另一项活动时更新。那么我该如何解决呢?任何其他想法或提示也对我有用。
#include<stdio.h>
#include<time.h>
#define CYCLING 1
#define RUNNING 2
#define SWIMMING 3
static int state ;
static int prevState ;
int stateTim;
void triathlonTim(int activity)
{
int activtyTimDur ;
if(activity == 10)
{
printf("doing Cycling\n\r");
state = CYCLING;
}
else if(activity == 20)
{
printf("doing Running\n\r");
state = RUNNING;
}
else if(activity == 30)
{
printf("doing Swimming\n\r");
state = SWIMMING;
}
if(prevState != state)
{
activtyTimDur = time(NULL) - stateTim;
stateTim =time(NULL);
printf("Activity Time Duration = %d\n\r", activtyTimDur);
}
}
int main(void)
{
volatile int activity;
while(1)
{
triathlonTim(activity);
sleep(1);
}
return 0;
}
【问题讨论】:
-
你在做
sleep(1),那为什么要等1000秒呢? -
main中的Activity没有初始化,是按值传递给函数的。它被标记为 volatile 的事实是无关紧要的。您应该假设 volatile 与您无关,直到您足够了解何时需要它。如果有帮助的话,我已经用 C 语言编程了 30 多年,还没有在我自己的代码中使用 volatile。你需要重新考虑。
-
在“main()”函数中,易失性变量“activity”从设备获取输入我在代码中没有看到。
-
@Barmar 主要函数由另一个函数调用,该函数具有该人正在执行的当前活动。表示活动变量正在从外部(在主函数之外)获取值
-
@ThomasJager 他不希望它休眠 1000 秒,他只是希望状态更改之间的时间为 1000 秒。
标签: c