You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

#include "dialogi.h"
#include "ui_dialogi.h"
#include <QMessageBox>

Dialogi::Dialogi(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialogi)
{
    ui->setupUi(this);
    //yhdistetaan signaalit ja slotit
    connect(this,SIGNAL(AsetaTestiarvo(int)),&saie,SLOT(AsetaTestiarvo(int)));
    connect(&saie,SIGNAL(PaivitaUi(int)),this,SLOT(VastaanotaArvoSaikeelta(int)));
}

Dialogi::~Dialogi()
{
    //sammutetaan säie, jottei tule segmentation faultia
    if(saie.isRunning())//onko asynkrooninen säie käynnissä
    {
        saie.pysayta();//pysäytetään säie
    }
    delete ui;
}

void Dialogi::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

//haetaan arvo ruudulta
void Dialogi::on_pushButton_clicked()
{
    QString apu=ui->lineEdit_2->text();
    int apu2=apu.toInt();
    emit AsetaTestiarvo(apu2);

}

void Dialogi::on_StartSaie_clicked()
{
    QMessageBox msgBox;
    if(saie.isRunning())//onko asynkrooninen säie käynnissä
    {
        msgBox.setText("Säie on jo käynnissä");
        msgBox.exec();
    }
    else
    {
        saie.start();//käynnistetään säie
    }
}

void Dialogi::on_StopSaie_clicked()
{
    if(saie.isRunning())//onko asynkrooninen säie käynnissä
    {
        saie.pysayta();//pysäytetään säie
    }
}

void Dialogi::VastaanotaArvoSaikeelta(int arvo)
{
    QString apu;
    apu.setNum(arvo);
    ui->lineEdit->setText(apu);
}
#ifndef DIALOGI_H
#define DIALOGI_H

#include <QDialog>
#include "saie.h"

namespace Ui {
    class Dialogi;
}

class Dialogi : public QDialog {
    Q_OBJECT
public:
    Dialogi(QWidget *parent = 0);
    ~Dialogi();
    Saie saie;
    //bool started;
protected:
    void changeEvent(QEvent *e);

private:
    Ui::Dialogi *ui;

private slots:
    void on_StopSaie_clicked();
    void on_StartSaie_clicked();
    void on_pushButton_clicked();
    void VastaanotaArvoSaikeelta(int);
signals:
    void AsetaTestiarvo(int);
};

#endif // DIALOGI_H


#include "saie.h"
#include <QDebug>


Saie::Saie(QObject *parent) :
    QThread(parent)
{
    Testiarvo=0;
    runTimer.start();
    uiTimer.start();
    SaieStop=false;
    jaksoaika=1;
    ui_paivitysaika=10;
}

// tällä saadaan saie pysaytettya
void Saie::pysayta()
{
    SaieStop=true;
}

void Saie::AsetaTestiarvo(int arvo)
{
    //suojataan mutexilla sijoitus atomiseksi operaatioksi
    QMutexLocker locer(&mutex);
    Testiarvo=arvo;
}

void Saie::run()
{
    int arvo;
    QString msg;
    forever
    {
        if (runTimer.elapsed() > jaksoaika)
        {
            runTimer.restart();
            Testiarvo++;
            Testiarvo=Testiarvo+3;
            if(uiTimer.elapsed()>ui_paivitysaika)
            {
                uiTimer.restart();
                emit  PaivitaUi(Testiarvo);
                msg.setNum(Testiarvo);
                qDebug()<< msg;//debug informaatiota appöication output ikkunaan
            }
        }
        if(SaieStop==true){break;}
    }
    SaieStop=false;
}
 #ifndef SAIE_H
#define SAIE_H

#include <QThread>
#include <QTime>
#include <QMutex>

class Saie : public QThread
{
Q_OBJECT
public:
    explicit Saie(QObject *parent = 0);
    int Testiarvo;
    bool SaieStop;
     QTime runTimer;
     QTime uiTimer;
     int jaksoaika;
     int ui_paivitysaika;
     void pysayta();
     QMutex mutex;
protected:
    //! run function for own real-time thread
    void run();
signals:
    void PaivitaUi(int);

public slots:
    void AsetaTestiarvo(int arvo);

};

#endif // SAIE_H
  • No labels
You must log in to comment.