Domanda

Sto scrivendo un semplice pianificatore di attività e promemoria usando QT che riprodurrà un file audio quando la data e l'ora di una determinata attività corrisponde alla data e all'ora corrente.

Per implementare questo, sto eseguendo un file QThread Il che controlla l'attività nell'elenco per vedere se eventualmente corrispondere all'ora corrente e, in tal caso, riproduce il file audio.

Questo ID è la mia classe originale:

class Task
{
  public:
      QString ta, desc;
      QTime ti;
      QDate da;
      int pri, diff;
      bool ala;
};  

Questa è la mia classe di thread:

class AlarmCheck : public QThread
{
  public:
      void setTask(QList<Task>);
      void run();
      bool isRunning;
      QString music;
      QTime alarmOffset;

  private:
      QList<Task> list;
};

La mia implementazione:

void AlarmCheck::setTask(QList<Task> l)
{
    list = l;
}

void AlarmCheck::run()
{
    while(isRunning)
    {
        foreach(Task t, list)
        {
            if((t.da == QDate::currentDate()) && (t.ti == QTime::currentTime()) && t.ala)
            {
                Phonon::MediaObject *gaana =
                        Phonon::createPlayer(Phonon::MusicCategory,
                                              Phonon::MediaSource(music));
                gaana->play();
                QMessageBox::information(NULL,
                                         "Alarm!!!",
                                         "The time has come for\n"
                                         + t.ta +
                                         "\n Time to do it!");
                gaana->stop();
            }
            qDebug("Curr = " + QTime::currentTime().toString().toAscii() + " Date = " + QDate::currentDate().toString().toAscii());
            qDebug("Task = " + t.ti.toString().toAscii() + " Date = " + t.da.toString().toAscii());                
        }
        sleep(1);
    }
}  

Il fatto è che il thread funziona perfettamente, ma il if() condizione all'interno del foreach() Loop non è mai soddisfatto per qualche motivo. Ho persino controllato la singola impostazione della data/ora/allarme (t.ala) usando Qdebugs (come puoi vedere); Stanno tutti bene.

È stato utile?

Soluzione

Tuo if La dichiarazione richiede che la data e l'orario Esattamente, fino al millisecondo. È improbabile che il tuo ciclo valuta in questo esatto momento. Se si desidera mantenere una logica simile (compiti di elaborazione in un ciclo), potresti provare a risolverli con "Attività successiva prima" (o forse usando una coda), quindi testando il tuo if Dichiarazione Se la corrente QDateTime è uguale a-Or-Greater rispetto alla data/ora dell'attività della prima attività.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top