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

Qt Discussion :

threads vs timer ?


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut threads vs timer ?
    Bonjour,

    voila j'ai avancer dans le code que je dois modifier cependant, voila mon nouveau probleme ...

    (en P.J mon code source et le resultat )

    ce que je veux faire :

    entrer dans la condition if toutes les delta_t secondes -> simple non .. ?
    mais on dirait que le nbr de secodnes ne s'incremente pas .. j'ai regardé pas mal d'exemple dans l'aide genre ca -> "time.pdf" mais pourtant c'est ce que j'ai fait ..

    Est-ce un probleme de librairie car je fonctionne en multi thread .. ?
    Si vous avez une idée .. ?

    (Je veux juste quelquechose de non-bloquant)

    ++ et merci ..
    Images attachées Images attachées

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    Salut sur ce site,

    http://qt.developpez.com/doc/3.3/mainclasses/

    Ttes les classe dispos .. mais que utiliser a votrea vis pour realiser mon timer ?
    Est - il necessaire de redeclarer la classe si j'inclus le .h correspondant ??

    ++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    Bon ben vous etes pas nombreux mais salut à vous !

    j'ai pas mal avancer sur mon probleme, voila mon nouveau probleme, mon compteur ne s'incremente pas , surement à cause du timer qui n'evolue pas ..


    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
     
    #ifndef DP_CONSIGN_H
    #define DP_CONSIGN_H
    #include "DpConsign.h"
    #include <QSpinBox.h>
    #include <QTimer.h>
    #include <qapplication.h>
    //! Class DpConsignImpl
    /*! This class inherits of DpConsign class.
    */
    /////////////////////////////////////////////////////////////////////////////////////
    class DpConsignImpl : public DpConsign {
    /////////////////////////////////////////////////////////////////////////////////////
    Q_OBJECT
    public:
    DpConsignImpl(QString str, bool b, QWidget* parent = 0, const char* name = 0, WFlags f = 0
    );
    ~DpConsignImpl();
    FILE * stream;
    int cpt;
    protected :
    QTimer monTimer ;
    private slots :
    void ButtonGoRelatif();
    void ButtonGoAbsolu();
    void ButtonGisDist();
    void Done(void);
    public slots :
    signals :
    AutoPosRelativeAction(float,float,float) ;
    AutoPosAbsoluteAction(float,float,float) ;
    AutoPosGisDistAction(float,float,float) ;
    };
    #endif // CALCULATOR_H
    1
    Dans mon Cpp, je rentre dans la boucle for mais comme cpt ne bouge pas , je bloque mon application (mon diagnostic est sûr car j'ai essayer en rajoutant une simulation d'incrementation du compteur et ca marche ) .. Vous voyez .. .?

    mais bon le timer ne marche pas lui ca c'est clair ..

    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
    96
    97
    98
    99
     
    ////////////////////////////////////////////////////////////////////
    // DpConsignImpl.cpp:
    ////////////////////////////////////////////////////////////////////
    #include "DpConsignImpl.h"
    ////////////////////////////////////////////////////////////////////
    //! DpConsignImpl constructor
    /*! Uses to implement the different mode of consign in the DP Consign TabPage
    */
    DpConsignImpl::DpConsignImpl(QString str, bool b_offset, QWidget* parent, const char* name, WF
    lags f)
    : DpConsign(parent, name, f) {
    ////////////////////////////////////////////////////////////////////
    connect( (QObject*)pushButton_Go_Relatif, SIGNAL(clicked()), this, SLOT(ButtonGoRelatif())
    ) ;
    connect( (QObject*)pushButton_Go_Absolu , SIGNAL(clicked()), this, SLOT(ButtonGoAbsolu() )
    ) ;
    connect( (QObject*)pushButton_Go_GisDist, SIGNAL(clicked()), this, SLOT(ButtonGisDist() )
    ) ;
    connect( &monTimer, SIGNAL(timeout()), this, SLOT(Done() ) ) ;
    this->monTimer.start(2000,TRUE);
    }
    ////////////////////////////////////////////////////////////////////
    //! DpConsignImpl destructor
    DpConsignImpl::~DpConsignImpl() {
    ////////////////////////////////////////////////////////////////////
    }
    //////////////////////////////////////////////////////////////////
    //! void DpConsignImpl::ButtonGoRelatif()
    /*! Called when the user valids the relativ consign
    */
    void DpConsignImpl::ButtonGoRelatif()
    //////////////////////////////////////////////////////////////////////
    {
    int delta_x = this->spinBoxDeltaX->value() ;
    int delta_y = this->spinBoxDeltaY->value() ;
    int cap = this->spinBoxCap2->value();
    emit AutoPosRelativeAction(delta_x, delta_y, cap) ;
    this->spinBoxDeltaX->setValue(0);
    this->spinBoxDeltaY->setValue(0);
    this->spinBoxDeltaX->setFocus();
    }
    //////////////////////////////////////////////////////////////////
    //! void DpConsignImpl::ButtonGoAbsolu()
    /*! Called when the user valids the absolute consign
    */
    void DpConsignImpl::ButtonGoAbsolu()
    //////////////////////////////////////////////////////////////////////
    {
    int x = this->spinBoxX->value() ;
    int y = this->spinBoxY->value() ;
    int cap = this->spinBoxCap->value();
    emit AutoPosAbsoluteAction(x, y, cap) ;
    this->spinBoxX->setFocus();
    }
    //////////////////////////////////////////////////////////////////
    //! void DpConsignImpl::ButtonGisDist()
    /*! Called when the user valids the consign in terms of azimuth and distance
    */
    void DpConsignImpl::ButtonGisDist()
    //////////////////////////////////////////////////////////////////////
    {
    // int gis = this->spinBoxGisement->value() ;
    // int dist= this->spinBoxDistance->value() ;
    // emit AutoPosGisDistAction(gis, dist, -1) ;
    int gis_total = this->spinBoxGisement->value() ;
    1
    int dist_total = this->spinBoxDistance->value() ;
    // int delta_d = this->spinBoxDeltaDist->value() ;
    // int delta_t = this->spinBoxDeltaTemps->value() ;
    int delta_d = 2;
    int delta_t = 5; // arbitraires pour linstant ..
    int nbr_wpts = dist_total / delta_d;
    int * gisements = new int [nbr_wpts] ;
    int * distances = new int [nbr_wpts] ;
    stream = fopen( "WPs.txt", "w" );
    fprintf( stream, "WPfinal = { %d ° ; %d m }\n\n" ,gis_total, dist_total );
    this->spinBoxDistance->setValue(0);
    this->spinBoxGisement->setFocus();
    // MODIF FRO 120307
    cpt=0;
    for(int i=0;i<nbr_wpts;){
    if(cpt>=i){
    fprintf( stream, "%d\t",cpt );
    gisements[i]=gis_total; // moins erreur
    distances[i]=(i+1) * delta_d;
    fprintf( stream, "WP%d\t= { %d ° ; %d m }\n",i, gisements[i], distances[i] );
    // emit AutoPosGisDistAction(gisements[i], distances[i], -1) ;
    i++;
    }
    }
    // FIN MODIFS FRO
    }
    void DpConsignImpl::Done()
    {
    disconnect( &monTimer, SIGNAL(timeout()), this, SLOT(Done() ) ) ;
    cpt++;
    }
    2

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut
    Essaye ton timer avec dans le point h :
    Qtimer* mon_timer;

    Puis dans le point Cpp il faut crée ton timer :
    mon_timer = new QTimer(this);
    puis le connecter :
    connect(mon_timer, SIGNAL(timeout()),this, SLOT(........));
    puis le lancer :
    timer->start(2000);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    Ca marche tjrs pas ... je comprends pas ce qu'il se passe ..

    regarde :

    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
    #ifndef DP_CONSIGN_H
    #define DP_CONSIGN_H
    #include "DpConsign.h"
    #include <QSpinBox.h>
    #include <QTimer.h>
    #include <qapplication.h>
    //! Class DpConsignImpl
    /*! This class inherits of DpConsign class.
    */
    /////////////////////////////////////////////////////////////////////////////////////
    class DpConsignImpl : public DpConsign {
    /////////////////////////////////////////////////////////////////////////////////////
    Q_OBJECT
    public:
    DpConsignImpl(QString str, bool b, QWidget* parent = 0, const char* name = 0, WFlags f = 0
    );
    ~DpConsignImpl();
    FILE * stream;
    int cpt;
    protected :
    QTimer* monTimer ;
    private slots :
    void ButtonGoRelatif();
    void ButtonGoAbsolu();
    void ButtonGisDist();
    void Done(void);
    public slots :
    signals :
    AutoPosRelativeAction(float,float,float) ;
    AutoPosAbsoluteAction(float,float,float) ;
    AutoPosGisDistAction(float,float,float) ;
    };
    #endif // CALCULATOR_H
    1

    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
    96
    97
    98
    99
    ////////////////////////////////////////////////////////////////////
    // DpConsignImpl.cpp:
    ////////////////////////////////////////////////////////////////////
    #include "DpConsignImpl.h"
    ////////////////////////////////////////////////////////////////////
    //! DpConsignImpl constructor
    /*! Uses to implement the different mode of consign in the DP Consign TabPage
    */
    DpConsignImpl::DpConsignImpl(QString str, bool b_offset, QWidget* parent, const char* name, WF
    lags f)
    : DpConsign(parent, name, f) {
    ////////////////////////////////////////////////////////////////////
    connect( (QObject*)pushButton_Go_Relatif, SIGNAL(clicked()), this, SLOT(ButtonGoRelatif())
    ) ;
    connect( (QObject*)pushButton_Go_Absolu , SIGNAL(clicked()), this, SLOT(ButtonGoAbsolu() )
    ) ;
    connect( (QObject*)pushButton_Go_GisDist, SIGNAL(clicked()), this, SLOT(ButtonGisDist() )
    ) ;
    monTimer= new QTimer(this);
    connect( monTimer, SIGNAL(timeout()), this, SLOT(Done() ) ) ;
    monTimer->start(2000);
    }
    ////////////////////////////////////////////////////////////////////
    //! DpConsignImpl destructor
    DpConsignImpl::~DpConsignImpl() {
    ////////////////////////////////////////////////////////////////////
    }
    //////////////////////////////////////////////////////////////////
    //! void DpConsignImpl::ButtonGoRelatif()
    /*! Called when the user valids the relativ consign
    */
    void DpConsignImpl::ButtonGoRelatif()
    //////////////////////////////////////////////////////////////////////
    {
    int delta_x = this->spinBoxDeltaX->value() ;
    int delta_y = this->spinBoxDeltaY->value() ;
    int cap = this->spinBoxCap2->value();
    emit AutoPosRelativeAction(delta_x, delta_y, cap) ;
    this->spinBoxDeltaX->setValue(0);
    this->spinBoxDeltaY->setValue(0);
    this->spinBoxDeltaX->setFocus();
    }
    //////////////////////////////////////////////////////////////////
    //! void DpConsignImpl::ButtonGoAbsolu()
    /*! Called when the user valids the absolute consign
    */
    void DpConsignImpl::ButtonGoAbsolu()
    //////////////////////////////////////////////////////////////////////
    {
    int x = this->spinBoxX->value() ;
    int y = this->spinBoxY->value() ;
    int cap = this->spinBoxCap->value();
    emit AutoPosAbsoluteAction(x, y, cap) ;
    this->spinBoxX->setFocus();
    }
    //////////////////////////////////////////////////////////////////
    //! void DpConsignImpl::ButtonGisDist()
    /*! Called when the user valids the consign in terms of azimuth and distance
    */
    void DpConsignImpl::ButtonGisDist()
    //////////////////////////////////////////////////////////////////////
    {
    // int gis = this->spinBoxGisement->value() ;
    // int dist= this->spinBoxDistance->value() ;
    // emit AutoPosGisDistAction(gis, dist, -1) ;
    1
    int gis_total = this->spinBoxGisement->value() ;
    int dist_total = this->spinBoxDistance->value() ;
    // int delta_d = this->spinBoxDeltaDist->value() ;
    // int delta_t = this->spinBoxDeltaTemps->value() ;
    int delta_d = 2;
    int delta_t = 5; // arbitraires pour linstant ..
    int nbr_wpts = dist_total / delta_d;
    int * gisements = new int [nbr_wpts] ;
    int * distances = new int [nbr_wpts] ;
    stream = fopen( "WPs.txt", "w" );
    fprintf( stream, "WPfinal = { %d ° ; %d m }\n\n" ,gis_total, dist_total );
    this->spinBoxDistance->setValue(0);
    this->spinBoxGisement->setFocus();
    // MODIF FRO 120307
    cpt=1;
    for(int i=0;i<nbr_wpts;){
    if(cpt>i){
    fprintf( stream, "%d\t",cpt );
    gisements[i]=gis_total; // moins erreur
    distances[i]=(i+1) * delta_d;
    fprintf( stream, "WP%d\t= { %d ° ; %d m }\n",i, gisements[i], distances[i] );
    // emit AutoPosGisDistAction(gisements[i], distances[i], -1) ;
    i++;
    }
    }
    // FIN MODIFS FRO
    }
    void DpConsignImpl::Done()
    {
    //disconnect( &monTimer, SIGNAL(timeout()), this, SLOT(Done() ) ) ;
    cpt++;
    }
    2
    Pour info, je suis en multi thread ..?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    Tu vois qqch qui te choc .. ? je sais vraiment pas pourquoi il ne demarre pas ... !
    surtout , que je n'ai ni erreur de compilation ni d'execution ..

    en meme tmpn je suis pas expert en C++ ..

    merci ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Threading] Thread et Timers
    Par DarkHerumor dans le forum C#
    Réponses: 7
    Dernier message: 29/07/2009, 12h13
  2. thread ou timer ou ?
    Par ziz2005 dans le forum MFC
    Réponses: 2
    Dernier message: 19/11/2006, 09h54
  3. [swing] Probleme de thread avec Timer
    Par issou dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 13/05/2006, 22h52
  4. [MFC] Thread et timer
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2005, 13h03
  5. Module Threading, utilisation timer(x,y) .
    Par aladin46 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/01/2005, 18h55

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