一个定时器,多个方法调用或多个定时器,一个方法调用?

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密集型的,有些则不是.

cta*_*cke 1

我认为我根本不会使用计时器。计时器在触发时会生成一个线程,这 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)