c - 在 C 中没有得到适当的持续时间
问题描述
让我们考虑一个像铁人三项这样的多项运动赛事。在这种情况下,当一个人完成一项活动(跑步、游泳、骑自行车等)后,他们会立即开始一项新活动。假设我有一个设备可以持续监控人的活动。如果您看到代码,在“main()”函数中,易失性变量“activity”从设备获取输入。比赛于 2 小时前开始。
我的目标是找出该人在该特定活动中的当前时间。假设从过去 1000 秒开始,该人正在进行跑步活动,而之前他/她正在“骑自行车”(这在一般情况下可能是任何事情)。另外,关键是先前活动的结束时间是当前活动的开始时间。
“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;
}
解决方案
您需要prevState
在状态更改时进行设置。否则,每次调用都将被视为状态更改。
if(prevState != state)
{
activtyTimDur = time(NULL) - stateTim;
stateTim =time(NULL);
prevState = state;
printf("Activity Time Duration = %d\n\r", activtyTimDur);
}
推荐阅读
- unity3d - 如何在unity2D中移动相机的一侧添加产卵器
- ansible - 如何使用清单文件设置主机名
- ios - AVAudioPlayer 在由 MPRemoteCommand 触发时“忘记”它正在播放
- ios - GLSL 色调着色器产生奇怪的结果,仅限 IOS?
- flutter - 关闭 WebviewScaffold 或调整 flutterWebviewPlugin 大小以适合父小部件
- python - 重力降低后如何让圆圈反弹?
- r - 如何将文本转换为 R 中的列,其中行中的列名不同
- haskell - GHCI 中的不同输出
- sql-server-2017 - 将查询作为参数传递?
- javascript - 创建多个数组列表