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++Builder Discussion :

problème avec le temps d'exécution


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Par défaut problème avec le temps d'exécution
    Bonjour tout le monde voilà mon problème
    Je veux écrire la somme suivant tel qu’elle est sur un TMemo la somme est :
    X11+X12+X13…….+Xij
    J’ai fait le code suivant mais il est très couteux en temps d’exécution


    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
     void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
     
    int i,j,n,m;
    n=StrToInt(Edit1->Text);
    m=StrToInt(Edit2->Text);
    for(i=1;i<=n;i++ )
    {
    for(j=1;j<=m;j++ )
    {
     
     Memo1->Text=Memo1->Text+ "x"+IntToStr(i)+ IntToStr(j)+"+";
     }
     }

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, d'après moi ce qui est long, c'est l'affichage. Donc, met tout dans une variable et affiche par la suite.

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        int i, j, n, m;
        String MonTexte = "";
     
        n = StrToInt(Edit1->Text);
        m = StrToInt(Edit2->Text);
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                MonTexte += "x" + IntToStr(i) + IntToStr(j) + "+";
            }
        }
        Memo1->Text = MonTexte;
    }
    PS: J'ai pas testé le code

  3. #3
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    on peut faire Memo1-> Text ??

    Je pensais que c'etais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Memo1->Lines->Add(asString);
    Mais je suis d'accord avec toi, je pense également qu'en créant une ansistring et l'affiché que une fois sa ira mieux

    Cordialament Baxter

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Par défaut
    Salut Je vous remerciez pour tout d’abor
    Le temps d’exécution et est réduit d’une manière remarquable mais pour des valeurs assez grandes de n et m (5000,90) par exemple le programme bloc totalement.
    Donc le problème pas encore résolut.

  5. #5
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    C'est un peu normal que se soit lent, on parle 450 000 boucles (5000 x 90). Je ne sais pas à quoi sert le programme, mais quand tu as autant boucles le CPU est utilisé au maximum, donc l'affichage passe au second plan. Si tu veux qu'il soit fluide tu peux utiliser des threads.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Par défaut problème avec temps d'éxécution
    Bonjour crayon j’ai fait une recherche sur l’utilisation des threads.j’ai lue quelques articls mais j’arrive pas à les utilisée. Ma question est y a-t-il d’autre méthodes pour accélairée la procédure sans utiliser les theads.
    Je vous remércé d’avance.



    Qui ne remércier pas les gens ne remércier pas dieu

  7. #7
    Membre éclairé Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    dans le .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class TMonThread : public TThread
    {
            protected:
                    void __fastcall Execute();
            public:
                    __fastcall TMonThread(bool CreateSuspended);
    };
    dans le .cpp
    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
     
    //---------------------------------------------------------------------------
    __fastcall TMonThread::TMonThread(bool CreateSuspended)
            : TThread(CreateSuspended)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TMonThread::Execute()
    {
    int i, j, n, m;
        String MonTexte = "";
     
        n = StrToInt(Edit1->Text);
        m = StrToInt(Edit2->Text);
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                MonTexte += "x" + IntToStr(i) + IntToStr(j) + "+";
            }
        }
        Memo1->Lines->Add(MonTexte);
    }
    ET pour créer le thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TMonThread *ThreadTest;
         ThreadTest=new TMonThread(false);
    voila a eseyer corialement baxter

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Par défaut
    Bonjour,

    Pourquoi, et plutot que d'utiliser un thread, ne pas se contenter de traiter la liste des messages durant l'execution de tes boucles?
    Cela aura pour effet d'éviter l'impression de 'freeze' de ton appli.

    Je te conseille aussi de modifier l'apparence de ton cursor pendant l'execution de tes boucles.

    Ce qui devrait donner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    this->Cursor = crHourGlass; //curseur sablier
     
    for ...{ //Ta boucle 1
      for ... { //Ta boucle 2
          Application->ProcessMessages(); //Traitement des messages actuellement dans la file d'attente des messages
         //Ton code
       }
    }
     
    this->Cursor = crArrow; //curseur standard
    Cordialement,

    Benjamin

  9. #9
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, si tu utilses un thread il faut mettre cette ligne dans un Synchronize:
    Citation Envoyé par Baxter67 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Memo1->Lines->Add(MonTexte);
    Regarde la fonction AffMessage() dans l'exemple au http://chgi.developpez.com/thread/

Discussions similaires

  1. Problème avec JCalander et l'exécutable
    Par khadi8 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/10/2012, 22h26
  2. Problème avec dimension Temps du cube wizard
    Par kadden dans le forum SSAS
    Réponses: 1
    Dernier message: 24/02/2012, 14h13
  3. Réponses: 1
    Dernier message: 28/09/2009, 08h30
  4. Problème avec le temps
    Par Vergil dans le forum Windows
    Réponses: 6
    Dernier message: 27/01/2007, 20h57
  5. Réponses: 1
    Dernier message: 30/09/2005, 10h46

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