Код: Выделить всё
QuickTickTimerФактический вопрос об этой части: < /p>
Код: Выделить всё
private void CompletionThreadLoop()
{
while (isRunning)
{
if (Win32Interop.GetQueuedCompletionStatus(iocpHandle, out _, out var lpCompletionKey, out _, uint.MaxValue))
{
if (lpCompletionKey == successCompletionKey)
{
var actualFireTime = DateTime.UtcNow;
var scheduledFireTime = new DateTime(nextFireTime, DateTimeKind.Utc);
var elapsedEventArgs = new QuickTickElapsedEventArgs(actualFireTime, scheduledFireTime);
if (autoReset)
{
nextFireTime += intervalTicks;
SetTimer();
}
else
{
isRunning = false;
if (timerHandle != IntPtr.Zero)
{
Win32Interop.CancelWaitableTimer(timerHandle);
}
}
elapsed?.Invoke(this, elapsedEventArgs);
}
}
}
}
< /code>
Я в настоящее время вызываю исследуемое событие в цикле завершения, который ожидает новых событий; Это так или иначе работает, но мне не нравится решение по нескольким причинам:
Таймер может надежно снизить до 2 мс, когда мой вызываемый метод действительно занимает больше 2 мс. тупик. Однако System.Timers.Timer Подробнее здесь: https://stackoverflow.com/questions/797 ... -8-0-timer
Мобильная версия