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 :

[Compact .NET][Smartphone][DateTime] Précision en MilliSeconds ?


Sujet :

C#

  1. #1
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut [Compact .NET][Smartphone][DateTime] Précision en MilliSeconds ?
    Bonjour,

    Je suis en train de développer une petite application Chrono que je vais porter vers une application pour Smartphone/PDA Phone.

    La manière la plus simple que j'ai trouvé de faire le chrono, est la suivante :

    1) Créer un objet DT1 (DateTime) qui est assigné à DateTime.Now
    2) Lancer le chrono.
    3) On entre dans une boucle TANT QUE.
    4) Créer un objet temporaire (DateTime) qui est assigné à DateTime.Now
    5) TimeSpan = temporaire - DT1.
    6) On boucle TANT QUE pas fin.
    7) Fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DateTime dt = new DateTime();
    dt = DateTime.Now;
     
    ...
     
    While(!fin)
    {
         DateTime dt2 = DateTime.Now;
         TimeSpan span = dt2 - dt;
         lTime.Text = span.ToString();
         ...
    }
    Différence de DATE.

    Le problème :
    C'est la précision ! Je n'ai qu'une précision à la seconde.

    J'aimerais avoir une précision de l'ordre du 10ieme ou du 100ieme de seconde. (MilliSecond ?)

    Comment arriver à obtenir une précision pareille avec différence de date ?

    Ou y aurait-il un autre moyen de créer un chrono autrement qu'avec une différence de dates ?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    La précision est celle du Tick, ce qui représente 100 nanosecondes. Ton souci vient du formatage, en effet, TimeSpan.ToString() n'affiche pas ce que tu désires.

    A toi d'appliquer le bon formatage.

  3. #3
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    En mode "debug" lorsque je place un breakpoint sur cette ligne et que j'examine la valeur du TimeSpan, je vois ceci dans ses propriétés :

    TotalSeconds = 7.0
    TotalMilliseconds = 7000.0
    Ticks = 70000000

    Admettons que j'affiche avec un formattage correct, j'aurai toujours 0 millisecondes ...

    Comment faire alors pour jouer avec les ticks et différence de date ?

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Tu dois avoir la baraka pour arriver à t'arrêter tout pile sur un chiffre rond sur les Ticks... Il nous manque le code que tu représente par les ... pour en dire plus.

  5. #5
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Je viens de faire un truc tout con et je n'ai pas ton problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    namespace WindowsApplication1
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Windows Form Designer generated code
     
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.timer1 = new System.Windows.Forms.Timer(this.components);
                this.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.label1 = new System.Windows.Forms.Label();
                this.SuspendLayout();
                // 
                // timer1
                // 
                this.timer1.Interval = 10;
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(100, 12);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "button1";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                // 
                // button2
                // 
                this.button2.Location = new System.Drawing.Point(110, 41);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(75, 23);
                this.button2.TabIndex = 1;
                this.button2.Text = "button2";
                this.button2.UseVisualStyleBackColor = true;
                this.button2.Click += new System.EventHandler(this.button2_Click);
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(126, 67);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(35, 13);
                this.label1.TabIndex = 2;
                this.label1.Text = "label1";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(292, 268);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.ResumeLayout(false);
                this.PerformLayout();
     
            }
     
            #endregion
     
            private System.Windows.Forms.Timer timer1;
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Label label1;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            private DateTime m_start;
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                TimeSpan ts = DateTime.Now - m_start;
                label1.Text = ts.ToString();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                m_start = DateTime.Now;
                timer1.Start();
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                timer1.Stop();
            }
        }
    }

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lTime.Text = span.ToString();
    Ton application est rafraichi à chaque fois que tu set le Text ?

  7. #7
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    // Action sur le bouton "Start" : 
    DateTime dt = new DateTime();
    dt = DateTime.Now;
    running = true;
    StartTime();
     
    // Action sur le bouton "Stop" : 
    running = false;
    StopTime();
     
    private void StopTime()
    {
         timerTime.Enabled = false;
    }
     
    private void StartTime()
    {
         timerTime.Enabled = true;
         While(timerTime.Enabled)
         {
              DateTime dt2 = DateTime.Now;
              TimeSpan span = dt2 - dt;
              lTime.Text = span.ToString();
     
              int cpt++; // compteur d'indice 
         }
    }
     
    private void timerTime_Tick(object sender, EventArgs e)
    {
        // Tick fixé à 150ms. 
        // rien !
    }

    Même en ne jouant pas avec le timer, j'obtiens les mêmes résultats ...

  8. #8
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Citation Envoyé par User.Anonymous Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lTime.Text = span.ToString();
    Ton application est rafraichi à chaque fois que tu set le Text ?

    Non, mais même la valeur de span n'est pas celle que je voudrais. C'est une valeur ronde, sans décimale, un chiffre tout beau tout rond ...

  9. #9
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par ExSter Voir le message
    Même en ne jouant pas avec le timer, j'obtiens les mêmes résultats ...
    Inspire toi du bout de code que j'ai posté...

  10. #10
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Citation Envoyé par neptune Voir le message
    Je viens de faire un truc tout con et je n'ai pas ton problème...
    Bizzarre, je procède de la même façon que toi ....

    Je vais essayer avec ton code.

  11. #11
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par ExSter Voir le message
    Bizzarre, je procède de la même façon que toi ....

    Je vais essayer avec ton code.
    Pas tout à fait, lorsque tu gères l'event Tick tu timer tu ne fait rien dans ta méthode ;-)

  12. #12
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Bon en effet ... Ca fonctionne correctement.

    Je ne comprends pas pourquoi cela ne fonctionne pas pour l'application Smartphone ...

    Lorsque je développe le même code pour l'application sous le Compact Framework .NET (Smartphone), il incrémente seconde par seconde ...

  13. #13
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Probablement que le Timer CF n'est pas capable d'une telle précision ou que la pompe à message sur ton device est calibrée sur une cadence limitée.

  14. #14
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    C'est apparemment le cas.

    Mais cela me semble plutot bizarre ... Merci pour ton aide.

    Mais lorsque je fabrique moi même un DateTime, et que je fais la différence de date, je n'obtiens plus quelque chose de bien rond.

    Cela se passerait-donc du coté TIMER ?

  15. #15
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Quel interval as tu spécifié à ton timer? J'ai pas de smartphone je ne sais pas faire de test live...

  16. #16
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Lorsque tu crées dans Visual Studio (2005 ou 2008) une application "Mobile" > Smartphone, tu as un émulateur de Smartphone qui se lance pour tester ton applic ... Pas besoin donc de Smartphone pour développer

    Pour mon Timer, j'ai spécifié comme toi, "10" pour le Tick.

  17. #17
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Oui, je sais bien ;-)

    Mais est ce que ton problème concerne ton application en mode émulateur ET déployé sur le device?

  18. #18
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    Citation Envoyé par neptune Voir le message
    Oui, je sais bien ;-)

    Mais est ce que ton problème concerne ton application en mode émulateur ET déployé sur le device?
    Ah ça, je n'ai pas testé sur mon Smart.

    Mais cela semble quand même bizarre que ça ne fonctionne pas sur l'émulateur qui justement, est censé être plus "rapide" et "performant" au niveau du cpu. (Vu qu'il tourne sur le PC, pas avec un 200 ou 400Mhz).

Discussions similaires

  1. [ASP.NET / SQL] DateTime incompatible ?
    Par BK dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/04/2007, 15h17
  2. Précision à la milliseconde sous Linux
    Par le merou dans le forum Linux
    Réponses: 5
    Dernier message: 11/02/2007, 18h42
  3. [MySQL + VB .NET] Probleme DateTime Valide
    Par zitoun dans le forum Installation
    Réponses: 7
    Dernier message: 08/08/2006, 13h31
  4. [VB.NET] champ datetime dans un datagrid
    Par HULK dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/12/2005, 15h26
  5. [VB.NET]Besoin de précision pour architecture 3-tiers
    Par Dnx dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/09/2005, 10h09

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