【发布时间】:2019-12-09 19:03:57
【问题描述】:
我在我的应用程序 (C# .NET) 中使用多媒体计时器来提高计时器的准确性并实现 1 毫秒的计时器频率。到目前为止,我的应用程序一直运行良好,直到最近它开始出现奇怪的行为。我试图了解我的应用程序出了什么问题。以下是采取的步骤
- 定时器频率设置为 1 毫秒,每 1 毫秒调用一次回调
- 有 4 个线程,每个线程都创建自己的计时器对象。它们都设置为在 1ms 后调用回调。这些是单独的实例,不共享。
- 旧代码执行时间约为 0.3 毫秒。在下一步之前,这一切正常。
- 应用程序代码已更改。定时器回调函数现在执行大约需要 1.2 毫秒。这显然是一个问题。 (稍后我将致力于优化代码。但现在我只想了解多媒体计时器的行为)
- 只有第一个线程正在调用计时器回调,而对于其他线程,回调仅被调用两次或三次,之后再也不会调用回调。
- 看起来对于其他线程,甚至错过了计时器(?)并且它无法赶上。 (每次中断都会丢失)。
能否请您解释一下计时器对象的行为。所有线程实际上都指向同一个计时器对象,因为它是一个进程吗? 为什么其他线程没有调用定时器回调?
【问题讨论】:
-
如果您提供如何设置多媒体计时器以及使用哪个 .NET 计时器的代码,回答起来会容易得多。否则只能猜测细节。
标签: c# performance timer