特定のタスクの日付と時刻が現在の日付と時刻と一致したときにサウンド ファイルを再生する Qt を使用して、簡単なタスク プランナーとリマインダーを作成しています。
これを実装するためQThread
に、リスト内のタスクをチェックして現在の時刻と一致するタスクがあるかどうかを確認し、一致する場合はサウンド ファイルを再生する を実行しています。
これは私の元のクラスのIDです:
class Task
{
public:
QString ta, desc;
QTime ti;
QDate da;
int pri, diff;
bool ala;
};
これは私のスレッドクラスです:
class AlarmCheck : public QThread
{
public:
void setTask(QList<Task>);
void run();
bool isRunning;
QString music;
QTime alarmOffset;
private:
QList<Task> list;
};
私の実装:
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);
}
}
問題は、スレッドが完全に実行されていることですが、何らかの理由でループif()
内の条件が満たされることはありません。foreach()
qDebugs を使用して個々の日付/時刻/アラーム設定 ( t.ala
) を確認しました (ご覧のとおり)。彼らはすべて元気です。