この記事では、指定された間隔でイベントをトリガーする高解像度タイマーの構築を詳述し、標準の System.timer
クラスよりも優れた制御を提供します。 既存の.NETオプションの制限を調査し、WindowsマルチメディアタイマーAPIを使用してソリューションを提示します。
stopwatch
クラスは高解像度の時間測定を提供しますが、正確な間隔でイベントトリガー用に設計されていません。 .NETフレームワーク自体には、私たちのニーズに相当する直接的なものがありません。 したがって、イベントタイミングに最適化されたWindowsマルチメディアタイマーAPIを活用します。
以下は、マルチメディアタイマーAPIを使用したC#実装です:
using System;
using System.Runtime.InteropServices;
class MultimediaTimer : IDisposable
{
private bool disposed = false;
private int interval, resolution;
private uint timerId;
private readonly MultimediaTimerCallback Callback;
public delegate void MultimediaTimerCallback(uint uTimerID, uint uMsg, IntPtr dwUser, uint dw1, uint dw2);
public event EventHandler TimerElapsed;
public MultimediaTimer()
{
Callback = new MultimediaTimerCallback(TimerCallbackMethod);
Resolution = 5; // Default resolution (milliseconds)
Interval = 10; // Default interval (milliseconds)
}
~MultimediaTimer() { Dispose(false); }
public int Interval
{
get { return interval; }
set
{
CheckDisposed();
if (value > 0) interval = value;
}
}
public int Resolution
{
get { return resolution; }
set
{
CheckDisposed();
if (value > 0 && value
重要な考慮事項:
マルチメディアタイマーAPIは、システム全体の設定と対話します。調整はシステムのパフォーマンスに影響を与える可能性があります。 タイマーの頻度を監視して、ターゲット間隔と一致するようにします。 WindowsはリアルタイムOSではないため、システムの負荷はタイマーの精度に影響を与える可能性があることを忘れないでください。
マルチメディアタイマーAPIは、C#でイベントベースのシグナリングを備えた高解像度タイマーを作成するための強力なメカニズムを提供し、正確なタイミングが重要なシナリオに対処します。 ネイティブの.NET機能ではありませんが、その機能により、特定のタイミング要件のための貴重なツールになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3