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!