WinCE 上C++的单次计时器
One-Shot Timer in C++ on WinCE
我正在编写一个事件处理函数,f(d)
,它接收一些数据,d
,并且必须X(d)
采取行动,然后休眠100ms,然后Y(d)
采取另一个动作。我会将其实现为:
void f(d)
{
X(d);
Sleep(100);
Y(d);
}
但是,f(d)
是从单线程事件处理程序调用的,因此 Sleep(100) 是不可接受的。
我想做以下几点:
void f(d)
{
X(d);
ScheduleOneShotTimer(Y,d,100);
}
我可以通过为每个调用创建一个新线程,将数据作为线程参数传递,并在执行Y(d)
之前调用Sleep
来实现ScheduleOneShotTimer
。但是,由于此事件每秒可能发生多达 100 次,因此我担心创建销毁所有这些线程所涉及的开销。
最好是操作系统级别对"一次性计时器"的支持,但我认为 CE 上并非如此。我知道 SetTimer,但这不适用于我,因为我正在编写一个没有消息循环的"控制台应用程序"。
关于如何构建此结构的任何其他建议将不胜感激。
调用timeSetEvent
API(我知道这是一个完全不直观的API名称)。 使用回调函数和TIME_ONESHOT
参数。
我会创建一个线程来保留时间戳回调对队列,休眠 100 毫秒(或更小的时间),然后执行所有经过的回调。 具有所有线程间同步的 OFC(关键部分的互锁等)。
这是一个注重性能的解决方案,而不是一个以精度为导向的解决方案。随着回调的堆积,执行时间可能超过 100 毫秒。但是由于您正在使用Wait(不精确)测量时间,我想这可能已经足够好了。
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- 保留计时器集合(对象与指针)的最佳方法
- 在网络套接字计时器滴答后增加asio短读错误
- 是否可以仅使用标准 c++/c++11 实现不带"sleep"的计时器?
- 为什么计时器工作了这么多次,甚至我设置它的repeat=false
- 如何在 c++ 中为我的游戏制作计时器,每 30 秒工作一次
- WinCE 上C++的单次计时器
- 阿西奥:为什么计时器只执行一次
- 在C/C++中,每100毫秒重新启动一次计时器
- 用户计时器在第一次使用后出错,无论我等待多长时间都会返回零