Generic C++ Timer for Linux
It's a wrapper around the Linux timers. The timer used is timerfd which is a file descriptor which blocks till a certain time has elapsed. This means it puts a thread to sleep till it unblocks which is the general approach for Linux events. There are three ways of using the timer:
- by overloading the
timerEvent()method in theCppTimerclass itself (fastest) - by registering a callback class called
Runnablewith an overloadedrun()method. - by registering a lambda function
cmake .
make
sudo make install
The doxygen generated online docs are here: https://berndporr.github.io/cppTimer/
Include CppTimer.h in your program. That's it.
TARGET_LINK_LIBRARIES(your_project_title cpptimer rt)
class MyTimer : public CppTimer {
void timerEvent() {
// your timer event code here
}
};
where you override timerEvent with your function.
The timer is programmed in nanoseconds:
MyTimer myTimer;
// every 500000ns
myTimer.startns(500000);
or milliseconds:
// every 200ms
myTimer.startms(200);
As soon as start returns the timer fires instantly and then at the specified interval.
To run demo.cpp just do cmake ., make and then ./demo.
Instead of overloading the run() method in the timer class you can
overload the run() method in the Runnable class and then register
this class with the timer class. Check out demo_callbackinterface which
demonstrates this approach.
Here, the callback is a std::function which then calls the
suscriber with the help of a lambda function
instead of a callback interface. This allows direct registering
of a method of the receiving class without an interface.
It's also more flexile because
some work can be done inside of the lambda function
and it's entirely pointer-free!
The recommended approach in modern C++!
Run:
ctest
That's it. Enjoy!