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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    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 à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    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 à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Points : 25
    Points
    25
    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 à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    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 à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    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 ..

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    avec Borland C++, jesais ce que j'aurai fait : j'aurai collé un composant graphique "TTimer" et regler la periode et pis hop ! mais la :

    1. je sais pas si on peut faire
    2. je sais pas comment faire, je n'ai pas trouvé de composants Timer dans les palettes ..

    ++

  8. #8
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    As-tu tenté en virant le void des paramètres de Done? Le moc parse et transforme les slots en chaîne de caractère (pour simplifier *beaucoup*). Je ne sais pas s'il va virer de lui même le void, donc il se peut que le slot Done() n'existe pas dans le système de méta-objet de Qt.

    MAIS! ce n'est que pure supposition, je n'ai jamais utilisé void, donc jamais eu un tel problème

    Pour vérifier si ta connection se fait bien pour commencer, ajoute la ligne CONFIG += console à ton .pro. Ca affichera une fenêtre qui te permettra de surveiller la sortie d'erreur de Qt et pourrait donner des indices.
    Accessoirement, met un qDebug("toto"); dans le slot Done(), tu sauras pour de bon si tu y passes ou non.

  9. #9
    Membre actif Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Points : 274
    Points
    274
    Par défaut
    avec un qtimer ca doit fonctionner!
    et essaie de remplacer le this du connect par qApp.

    on sait jamais.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    Salut à tous,

    Dsl pour mon absence, j'ai du faire autre chose pendant ce temps la, je reprends mon developpement ..

    J'ai insister avec QTimer mais rien n'y fait .. j'ai cherché des post suir le Web, j'ai essayé de comprendre la logique de developpement .. au final ca donne rien, je m'en sors pas , en clair j'aimerais revenir a cet encroit "ici" n fois (n=nbr_wpts) toutes les s secondes (m=delta_t) sans que le programme se bloque (j'ai essayé avec sleep mais ca se bloque .. ce que je veu c'est que le emiyt se fasse et que le soft continu a tourner ..) .. donc j'enleverai a ce moment la structure for (;..

    en P.J, je glisse mon cpp, .h .. voili voilou ..c'est vraiment chiant d'etre bloqué ..
    j'ai meme resorti des vieux cours et jhe sais pas ou je merde, et je sais meme pas comment m'y prendre pour y arriver ..


    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
     
    #ifndef DP_CONSIGN_H
    #define DP_CONSIGN_H
    #include "DpConsign.h"
    #include <QSpinBox.h>
    #include <Qthread.h>
    #include <windows.h>
    #include <QThread.h>
    #include <QTimer.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 :
    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
    100
     
    ////////////////////////////////////////////////////////////////////
    // DpConsignImpl.cpp:
    ////////////////////////////////////////////////////////////////////
    #include "DpConsignImpl.h"
    #include "QTimer.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() )
    ) ;
    }
    ////////////////////////////////////////////////////////////////////
    //! 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 = 3;
    int delta_t = 2; // 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;
    QTimer * raliTimer = new QTimer (this);
    QTimer::singleShot(1000, raliTimer,SLOT (DpConsignImpl::Done()));
    for(int i=0;i<nbr_wpts;i++){ //ici
    gisements[i]=gis_total; // moins cap actuel ..
    distances[i]=(i+1) * delta_d;
    //emit AutoPosGisDistAction(gisements[i], distances[i], -1) ;
    fprintf( stream, "cpt = %d WP%d\t= { %d ° ; %d m }\n",cpt, i, gisements[i],
    distances[i] );
    fflush(stream);
    //Sleep(1000*delta_t);
    }
    fclose(stream);
    }
    void DpConsignImpl::Done()
    {
    fprintf( stream, "increment");
    cpt+=10;
    }
    // FIN MODIFS FRO
    2

  11. #11
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTimer::singleShot(1000, raliTimer,SLOT (DpConsignImpl::Done()));
    C'est quoi ce connect? Ca m'étonne pas que ça marche pas écrit comme ça. Retourne lire la doc sur les signaux/slots, tu devrais comprendre ton erreur.

    Au passage, FILE* => dehors. Tu utilises Qt et C++ donc il est trés nettement préférable d'utiliser QFile, ou ofstream (puisque j'ai l'impression que tu ne fais que de la sortie).

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    Salut,

    Ben si je fais que de la sortie, en fait jecris juste sur un fichier pour le developpemment mais a terme c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //emit AutoPosGisDistAction(gisements[i], distances[i], -1) ;
    qui sera invoqué toutes les n secondes ..

    je regarde la doc ..

    ++

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    Bon ce que je retiens de la doc

    (http://qt.developpez.com/doc/4.2/signalsandslots/)

    1. C'est qu'il faut bien déclarer son Timer comme une instance de classe
    2. qu'il faut declarer ses sgnals (entrees) & slots (sorties)..
    3. connecter le tout pour que la bonne fonction soit executé en cas d'evenement..

    Bon la ca marche .. mais l'arcihetcture de mon code est nulle par rappoiret a ce que je veux faire , je vais bosser la dessus .. ad'tal

    ++ et merci ..

    Unlucky .

    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
     
    #ifndef DP_CONSIGN_H
    #define DP_CONSIGN_H
    #include "DpConsign.h"
    #include <QSpinBox.h>
    #include <Qthread.h>
    #include <windows.h>
    #include <QThread.h>
    #include <QTimer.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;
    int WaitVar;
    protected :
    private slots :
    void ButtonGoRelatif();
    void ButtonGoAbsolu();
    void ButtonGisDist();
    void Done();
    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
    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 = 3;
    int delta_t = 2; // 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;
    // timer
    QTimer * RaliTimer = new QTimer (this) ;
    connect(RaliTimer,SIGNAL(timeout()),this, SLOT(Done())) ;
    RaliTimer -> start(1000,FALSE);
    // fin timer
    for(int i=0;i<nbr_wpts;i++){ //ici
    gisements[i]=gis_total; // moins cap actuel ..
    distances[i]=(i+1) * delta_d;
    //emit AutoPosGisDistAction(gisements[i], distances[i], -1) ;
    fprintf( stream, "cpt = %d WP%d\t= { %d ° ; %d m }\n",cpt, i, gisements[i],
    distances[i] );
    fflush(stream);
    //Sleep(1000*delta_t);
    WaitVar=0;
    //while(WaitVar==0)
    //;
    }
    fclose(stream);
    }
    void DpConsignImpl::Done()
    {
    WaitVar=1;
    cpt+=2;
    }
    // FIN MODIFS FRO
    2

+ 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