Я удивлён, что не нашёл ничего вменяемого по этому вопросу. Но всё же, как в с++ вызвать некую функцию по завершении таймера? Вопрос достаточно банальный однако. Подозреваю, что тут не обойдётся без boost::bind. Нужен аналог данного: QTimer::singleShot(100, this, SLOT(onTimeExpired()));
Ответ
Озадачали Вы меня. Вот тут на досуге набросал что-то.
#pragma once
#include
namespace MyTimer {
class Timer {
private:
boost::shared_ptr
template
public:
_func (long long _dur, const Callable& _cb): dur (_dur), cb((Callable&) _cb) {}
void operator() () {
boost::this_thread::sleep(boost::posix_time::milliseconds(dur));
cb();
}
};
public:
template
~Timer() {}
Timer (const Timer& tm) {
this->thr = tm.thr;
}
Timer operator= (const Timer& tm) {
if (this != &tm) this->thr = tm.thr;
return *this;
}
void interrupt () {
thr->interrupt();
}
};
}
Это все оформляется в виде хедера. Используется очень просто.
MyTimer::Timer Tm1 (5000, func);
Первый параметр - время ожидания в миллисекундах, второй - вызываемый объект. Может быть простая функция, может быть функтор. Главное, не имеет параметров и возвращает void.
Можно прервать ожидание с помощью метода interrupt()
Испытывал в лине, gcc4.6 и 4.7 и icpc 12, boost 1.49 и 1.51
Комментариев нет:
Отправить комментарий