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#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 21
    Points : 13
    Points
    13
    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
    Points : 5 195
    Points
    5 195
    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.
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    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 éprouvé
    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
    Points : 1 046
    Points
    1 046
    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
    Points : 1 051
    Points
    1 051
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    tu peux aussi utiliser System.Timers.Timer

  7. #7
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Sur un Windows, rien ne peut t'assurer que l'OS te donnera la main au moins une fois toutes les 20ms, surtout s'il y a de la charge CPU.

    Linux est sans doute plus rigoureux à ce niveau là, mais je ne connais pas assez son fonctionnement.
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 172
    Points : 25 112
    Points
    25 112
    Par défaut
    windows server doit être réglo aussi je pense
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    de toutes façons thegitch ne semble pas intéressé par la réponse... il a posé la question il y a presque un mois et n'est jamais revenu sur le forum depuis

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