2015-04-18 16:50:19 +02:00
|
|
|
#include "PeriodicTask.h"
|
2015-10-17 03:30:42 +02:00
|
|
|
#include <messmer/cpp-utils/logging/logging.h>
|
2015-04-18 16:50:19 +02:00
|
|
|
|
|
|
|
using std::function;
|
|
|
|
using std::endl;
|
2015-10-17 03:30:42 +02:00
|
|
|
using namespace cpputils::logging;
|
2015-04-18 16:50:19 +02:00
|
|
|
|
|
|
|
namespace blockstore {
|
|
|
|
namespace caching {
|
|
|
|
|
2015-10-28 15:00:49 +01:00
|
|
|
PeriodicTask::PeriodicTask(function<void ()> task, double intervalSec) :
|
|
|
|
_task(task),
|
|
|
|
_interval((uint64_t)(UINT64_C(1000000000) * intervalSec)),
|
|
|
|
_thread(std::bind(&PeriodicTask::_loopIteration, this)) {
|
|
|
|
_thread.start();
|
2015-04-18 16:50:19 +02:00
|
|
|
}
|
|
|
|
|
2015-10-28 15:00:49 +01:00
|
|
|
void PeriodicTask::_loopIteration() {
|
|
|
|
try {
|
|
|
|
boost::this_thread::sleep_for(_interval);
|
|
|
|
_task();
|
|
|
|
} catch (const std::exception &e) {
|
|
|
|
LOG(ERROR) << "PeriodicTask crashed: " << e.what();
|
|
|
|
throw;
|
|
|
|
} catch (...) {
|
|
|
|
LOG(ERROR) << "PeriodicTask crashed";
|
|
|
|
throw;
|
|
|
|
}
|
2015-04-18 16:50:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|