IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Timer très précis


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 21
    Par défaut Timer très précis
    Bonjour à tous,

    Je sais d'avance que le problème que j'ai est un problème récurrent mais je n'arrive toujours pas à trouver une solution élégante, simple et efficace. Kezako ? C'est simple ... en théorie

    J'ai conçu un générateur de paquets. Langage : C#. Ok, marche super bien. J'aimerais maintenant pouvoir émettre un paquet toutes les 20ms. J'aimerais aussi que ça se fasse avec une bonne précision (+- 1-2 ms par exemple).

    J'ai essayé les timers standards: pas précis. J'ai essayé de calculer les temps absolus à l'aide des Ticks, de soustraire le temps d'exécution de la tâche au temps d'attente de 20ms: pas précis.

    J'ai essayé l'attente active "massive" : toujours pas précis.

    Je suis toujours resté en "haut" niveau (C# donc) mais j'ai bien réalisé que je devais descendre en C++, voire C pour pouvoir réaliser une chose pareille. Mais là, je ne trouve pas de code pour réaliser une chose pareille (rappel : pouvoir faire qqch toutes les 20ms)

    Une idée ? Un concept ? Un code à me proposer ?

    Merci d'avance.

    TheGitch

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    pour les timers avec une bonne précision, tu peux :

    System.windows.Forms.Timer ==> Bof en terme de précision

    System.Windows.Thread.Timer ==> Plutot bon

    Sinon, tu peux utiliser les QueryPerformanceTimer (on trouve plein d'exemple en C# sur le net), et là, tu auras une bonne précision (à priori, le Thread.Timer s'appuie dessus).. (mais limité à X suivant l'OS).

    Je déconseille le Windows.forms.Timer dans la mesure ou il s'appuie sur la pile de message Windows et donc, est "perfectible" de ce fait !!!

    Voilou.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    tu peux faire un thread qui boucle avec un thread.sleep(1)
    tu auras une précision à 1 milliseconde, ca doit etre pas mal

    sinon le System.Threading.Timer est asynchrone à priori, donc ca doit etre comme je décris précedemment, un thread qui boucle en attendant l'interval
    d'ailleurs l'interval est as double alors que celui de windows.forms est as integer
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    tu peux faire un thread qui boucle avec un thread.sleep(1)
    tu auras une précision à 1 milliseconde, ca doit etre pas mal

    sinon le System.Threading.Timer est asynchrone à priori, donc ca doit etre comme je décris précedemment, un thread qui boucle en attendant l'interval
    d'ailleurs l'interval est as double alors que celui de windows.forms est as integer
    Je crois que Thread.Sleep est très peu précis. Sans compter que c'est l'OS qui décide au final si le thread se réveille vraiment ou pas.

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Sphax Voir le message
    Sans compter que c'est l'OS qui décide au final si le thread se réveille vraiment ou pas.
    Ce sera de toute façon toujours le cas, quelque soit la solution pour laquelle tu optes. A toi de donner une priorité maximale à ton thread si tu as besoin qu'il soit réactif.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tu peux aussi utiliser System.Timers.Timer

Discussions similaires

  1. Quel éditeur XML? (pour un besoin très précis)
    Par coyotte507 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 18/05/2008, 14h35
  2. [timer] un timer "très" longue durée?
    Par bakonu dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2007, 16h42
  3. Un timer plus précis que SDL_GetTicks()
    Par goof_22 dans le forum SDL
    Réponses: 1
    Dernier message: 29/10/2006, 19h34
  4. [Timer]Timer pas très précis
    Par harold63 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 25/07/2005, 08h36
  5. envoi de signal selon un timing très précis
    Par shura dans le forum POSIX
    Réponses: 3
    Dernier message: 17/12/2004, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo