#include <QtGui>
#include <QObject>
class AlarmClock
: public QObject { Q_OBJECT
public:
public slots:
void start(int ms = 1000) {
if(m_timer!=0) return;
m_timer = startTimer(ms); // 1s resolution
}
void stop() {
if(m_timer==0) return;
killTimer(m_timer);
m_timer = 0;
}
QList<QDateTime>::iterator iter = qLowerBound(m_alarms.begin(), m_alarms.end(), dt);
if(iter==m_alarms.end() || *iter != dt) m_alarms.insert(iter, dt);
}
signals:
protected:
if(ev
->timerId
()!=m_timer
) { QObject::timerEvent(ev
);
return;
} while(!m_alarms.isEmpty() && m_alarms.first()<=current) {
emit alarm(m_alarms.first());
m_alarms.removeFirst();
}
}
private:
QList<QDateTime> m_alarms;
int m_timer;
};
Q_OBJECT
public slots:
qDebug() << dt;
}
};
#include "main.moc"
int main(int argc, char **argv){
AlarmClock alarms;
Dummy d;
alarms.start();
return app.exec();
}
#include <QtGui>
#include <QObject>
class AlarmClock : public QObject {
Q_OBJECT
public:
AlarmClock(QObject *parent = 0) : QObject(parent), m_timer(0) {}
public slots:
void start(int ms = 1000) {
if(m_timer!=0) return;
m_timer = startTimer(ms); // 1s resolution
}
void stop() {
if(m_timer==0) return;
killTimer(m_timer);
m_timer = 0;
}
void addAlarm(const QDateTime &dt) {
QList<QDateTime>::iterator iter = qLowerBound(m_alarms.begin(), m_alarms.end(), dt);
if(iter==m_alarms.end() || *iter != dt) m_alarms.insert(iter, dt);
}
signals:
void alarm(const QDateTime &dt);
protected:
void timerEvent(QTimerEvent *ev) {
if(ev->timerId()!=m_timer) { QObject::timerEvent(ev); return; }
QDateTime current = QDateTime::currentDateTime();
while(!m_alarms.isEmpty() && m_alarms.first()<=current) {
emit alarm(m_alarms.first());
m_alarms.removeFirst();
}
}
private:
QList<QDateTime> m_alarms;
int m_timer;
};
class Dummy : public QObject {
Q_OBJECT
public slots:
void onAlarm(const QDateTime &dt) {
qDebug() << dt;
}
};
#include "main.moc"
int main(int argc, char **argv){
QApplication app(argc, argv);
AlarmClock alarms;
Dummy d;
d.connect(&alarms, SIGNAL(alarm(QDateTime)), &d, SLOT(onAlarm(QDateTime)));
alarms.addAlarm(QDateTime(QDate::currentDate(), QTime::currentTime().addSecs(2)));
alarms.addAlarm(QDateTime(QDate::currentDate(), QTime::currentTime().addSecs(6)));
alarms.addAlarm(QDateTime(QDate::currentDate(), QTime::currentTime().addSecs(14)));
alarms.addAlarm(QDateTime(QDate::currentDate(), QTime::currentTime().addSecs(10)));
alarms.start();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks