我正在尝试编写这个程序,无论何时触发传感器,我都希望有一个延迟,比如说3秒,然后做一些操作,这应该很简单。
理想情况下,它应该是(传感器触发(3…2…1…(做点什么(,我正在努力解决的是倒计时开始的场景3…2..(传感器再次触发(1……(做些什么(,现在这就是事情崩溃的地方,因为我需要另一个延迟来同时从3开始倒计时,但我不知道如何实现这一点。我希望我能发布这部分代码,但整个代码是链接在一起的。有没有一种方法可以用一个简单的C代码做到这一点,或者这需要先进的技术?
有很多方法:
- 使用线程。传感器线程将读取传感器并休眠3秒钟
- 使用非阻塞延迟
unsigned getTick(void); // for example 1000 ticks per second
vooid foo(void)
{
unsigned sensor1StartTime = 0;
while(1)
{
if(!sensor1StartTime || (getTick() - sensor1StartTime >= 3000))
{
handleSensor1(); // it will be executed every ~three seconds
sensor1StartTime = getTick();
}
// do something else
// "something else" will not be blocked by delay.
}
}
每当传感器触发时,启动一个线程,延迟(倒计时(并在线程函数内做一些事情(不管你想做什么(。