4

我正在编写一个事件处理函数,f(d)它接收一些数据,d并且必须采取行动X(d),然后休眠 100 毫秒,然后采取另一个行动Y(d)。我将其实现为:

void f(d)
{
  X(d);
  Sleep(100);
  Y(d);
}

但是,f(d)从单线程事件处理程序调用,因此 Sleep(100) 是不可接受的。

我想做以下事情:

void f(d)
{
  X(d);
  ScheduleOneShotTimer(Y,d,100);
}

我可以ScheduleOneShotTimer通过为每个调用创建一个新线程,将数据作为线程参数传递,并Sleep在执行之前调用来实现Y(d)。但是,由于此事件每秒可能发生多达 100 次,我担心创建销毁所有这些线程所涉及的开销。

最好有操作系统级别的“一次性计时器”支持,但我认为 CE 上不是这种情况。我知道 SetTimer,但这不适用于我,因为我正在编写一个没有消息循环的“控制台应用程序”。

对于如何构建它的任何其他建议将不胜感激。

4

2 回答 2

6

调用timeSetEventAPI(我知道一个完全不直观的 API 名称)。使用回调函数和TIME_ONESHOT参数。

于 2012-12-17T02:26:53.520 回答
0

我将创建一个线程来保留时间戳回调对队列,休眠 100 毫秒(或更短的时间),然后执行所有经过的回调。具有所有线程间同步的 OFC(在关键部分上互锁等)。

这是一个注重性能的解决方案,而不是一个注重精度的解决方案。随着回调的堆积,执行时间可能会超过 100 毫秒。但是,由于您正在使用 Wait 测量时间(这并不精确),我想它可能已经足够好了。

于 2012-12-16T17:32:43.253 回答