「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C#高解像度タイマーとイベント間隔信号を作成する方法

C#高解像度タイマーとイベント間隔信号を作成する方法

2025-04-14に投稿されました
ブラウズ:724

How Can I Create a High-Resolution Timer with Event-Based Interval Signaling in C#?

c#

でイベント処理を伴う正確な高解像度タイマーを作成する

この記事では、指定された間隔でイベントをトリガーする高解像度タイマーの構築を詳述し、標準の System.timer クラスよりも優れた制御を提供します。 既存の.NETオプションの制限を調査し、WindowsマルチメディアタイマーAPIを使用してソリューションを提示します。

stopwatch クラスは高解像度の時間測定を提供しますが、正確な間隔でイベントトリガー用に設計されていません。 .NETフレームワーク自体には、私たちのニーズに相当する直接的なものがありません。 したがって、イベントタイミングに最適化されたWindowsマルチメディアタイマーAPIを活用します。

マルチメディアタイマー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