1

我为多媒体计时器编写了一个 C# 包装器:该Start方法timeSetEvent使用用户指定的回调调用,该Stop方法只需调用timeKillEvent.

我有一个单元测试应该检查它是否Stop有效:

using (var timer = new HighResolutionTimer(20))
{
    int counter = 0;
    timer.Elapsed += (s, e) => Interlocked.Increment(ref counter);
    timer.Start();
    Thread.Sleep(40);
    timer.Stop();
    //Thread.Sleep(10);
    int old = counter;
    Assert.AreNotEqual(0, old);
    Thread.Sleep(40);
    Assert.AreEqual(old, counter);
}

我的问题是,有时此测试会失败,因为该事件在我调用后又发生了一次Stop。我尝试TIME_KILL_SYNCHRONOUS在创建时添加标志,但它似乎不起作用。我无法从文档中理解它到底应该做什么。根据 MSDN:

使用 TIME_KILL_SYNCHRONOUS 和 TIME_CALLBACK_FUNCTION 标志创建事件可防止在调用 timeKillEvent 函数后发生事件。

这是否意味着任何未决事件都不会被执行?或者更确切地说,timeKillEvent在所有未决事件执行后,该方法可能不会返回?

我在网上搜索但找不到答案。

无论如何,这对我的测试没有帮助。我可以让我的测试始终通过的唯一方法是Sleep在我调用Stop.

4

0 回答 0