use*_*258 6 .net c# timer windows-ce
我正在.NET CF 2.0上开发WinCE 5.0的应用程序.
我想知道其他人在以下两种情况下看到的最佳解决方案:
假设我有10个方法需要每50mS运行一次.
解决方案1:
创建一个每50mS运行一次的System.Threading.Timer,然后在此回调中运行上面提到的10个方法.
解决方案2:
创建10个System.Threading.Timer,每50mS运行一次,然后在每个回调中调用上述方法之一.
您认为哪种解决方案最好?有些方法是cpu密集型的,有些则不是.
我认为我根本不会使用计时器。计时器在触发时会生成一个线程,这 a) 需要更多时间,b) 允许重入,这意味着您可以同时运行您的方法,特别是如果它们需要一段时间。
我会在启动时生成一个线程(您可以定义这意味着什么 - 应用程序启动、某些对象创建等),该线程按顺序执行所有读取,执行 Sleep 调用,然后重复。
沿着这些思路:
private void Startup()
{
new Thread(WorkerProc) { IsBackground = true }
.Start();
}
private void WorkerProc()
{
int pollPeriod = 50;
while (true)
{
var et = Environment.TickCount;
// call your methods
et = Environment.TickCount - et;
var sleep = pollPeriod - et;
if (sleep < 0) sleep = 0; // always yield
Thread.Sleep(sleep);
}
}
Run Code Online (Sandbox Code Playgroud)