我不是Windows专家,只写了几个GUI VB程序。我确实管理K&R C语言和大量汇编程序,并且在嵌入式系统和微处理器控制应用程序领域拥有35年以上的经验。所以我主要是硬件+电子产品的人。我知道,由于许多有效的原因,在Windows中不再可能使用普通的,非操作系统的控制软件或旧的DOS风格的中断。我也知道,如果要在Windows下使用受保护的中断,则应编写特殊的驱动程序并创建线程。因此,专家:如果我的问题听起来太简单或天真,我深表歉意。我进行了“搜索和研究”,但没有找到一个简单解决方案。 Non-blocking sleep timer in C,Timer to implement a time-out function,Using Timers都使用GUI或C ++或过于复杂。
我需要编写一个实现大型状态机的Windows32控制台应用程序,并且需要几个通信超时计时器以及一些其他并发进程计时器,范围从1 ms到几十分钟不等。 Sleep()将不起作用,因为自动机在等待这些事件以表明其终止时仍在继续工作。我找到了此解决方案CreateWaitableTimer with an Asynchronous Procedure Call。此代码应该在K&R C中工作吗,并且代码如何?如果我是对的,则回调函数可以包含计时器所需的小代码,而无需像Sleep()那样挂起程序。我正在使用MS Visual Studio 2012作为C编译器。对于非常简单的C解决方案的任何建议和帮助,我将非常感谢。
答案 0 :(得分:0)
大状态机似乎是要走的路。像这样:
int state = STATE_POWERUP, done = 0;
DWORD timeout;
while (! done) {
DWORD ticks = GetTickCount();
case (state) {
STATE_POWERUP:
. . .
state = STATE_INIT1;
break;
STATE_INIT1:
timeout = ticks + 30;
state = STATE_INIT2;
break;
STATE_INIT2:
if (ticks < timeout) { break; }
. . .
state = STATE_INIT3;
break;
STATE_INIT3:
. . .
default:
assert(0);
}
}