我为多媒体计时器编写了一个 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
.