"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment créer un signal de minuterie à haute résolution C # et un signal d'intervalle d'événement

Comment créer un signal de minuterie à haute résolution C # et un signal d'intervalle d'événement

Publié le 2025-04-14
Parcourir:298

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

Création d'une minuterie précise à haute résolution avec manipulation d'événements en c #

Cet article détaille la construction d'un minuteur haute résolution en C # qui déclenche un événement à des intervalles spécifiés, offrant un contrôle plus fin que la classe standard System.timer . Nous explorerons les limites des options .NET existantes et présenterons une solution à l'aide de l'API Timer Multimedia Windows.

Bien que la classe stopwatch fournit une mesure de temps haute résolution, il n'est pas conçu pour le déclenchement d'événements à des intervalles précis. Le framework .NET lui-même n'a pas un équivalent direct à nos besoins. Par conséquent, nous serons en tirer parti de l'API Timer Multimedia Windows, qui est optimisé pour le synchronisation des événements.

Implémentation d'un minuteur haute résolution à l'aide de l'API de minuterie multimédia

Vous trouverez ci-dessous une implémentation C # en utilisant l'API de la minuterie multimédia:

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 

Considérations importantes:

L'API Timer multimédia interagit avec les paramètres à l'échelle du système; Les ajustements pourraient affecter les performances du système. Surveillez la fréquence de la minuterie pour s'assurer qu'elle correspond à l'intervalle cible. N'oubliez pas que Windows n'est pas un système d'exploitation en temps réel, donc la charge du système peut avoir un impact sur la précision du minuteur.

Conclusion

L'API Multimedia Timer fournit un mécanisme puissant pour créer des minuteries à haute résolution avec une signalisation basée sur des événements en C #, en abordant les scénarios où un timing précis est critique. Bien qu'il ne s'agisse pas d'une fonctionnalité .NET native, ses capacités en font un outil précieux pour des exigences de synchronisation spécifiques.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3