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 theCppTimer
class itself (fastest) - by registering a callback class called
Runnable
with 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_runnable
which
demonstrates how to use this method.
Here, the callback is established with the help of a lambda function instead of a callback interface. This allows direct registering of a method of the receiving class but one needs to get used to the lambda function syntax. It also allows more flexibility in doing some work inside of the lambda function and it's entirely pointer-free.
Run:
ctest
That's it. Enjoy!