blTimerAPI is a lightweight timer library based on std::thread that creates timers on parallel threads that fire at specified intervals for a specified amount of time
- c++11
- std::thread
The blTimer class can be used with any type of function such as a function, a functor, a lambda function, member functions, with any number of arguments
Here's an example code where we feed a functor to our timer, and set the timer period to 1 second (that means it fires every second), set its total duration to 5 seconds (it stops firing after 5 seconds) and set its maximum number of firings to -1 (it means it never stops firing until it runs for "duration" seconds)
// Include the thread
#include <thread>
// Include iostream to output to console
#include <iostream>
// Include the blTimerAPI library
#include "blTimerAPI/blTimerAPI.hpp"
//-------------------------------------------------------------------
// A simple worker class
//-------------------------------------------------------------------
class WorkerClass
{
public:
WorkerClass(){}
~WorkerClass(){}
void workFunction(int& value)
{
std::cout << "value = " << ++value << std::endl;
}
};
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// main program function
//-------------------------------------------------------------------
int main(int argc, char *argv[])
{
// Create the worker class
WorkerClass myWorker;
// Create the timer and set its
// properties
blTimerAPI::blTimer myTimer;
myTimer.setDuration(5); // In seconds
myTimer.setPeriod(1); // In seconds
myTimer.setMaximumNumberOfTimesTheTimerFires(-1); // Negative means no max limit is set
// The value variable
int myValue = 0;
// Start the timer
myTimer.start(&WorkerClass::workFunction,std::ref(myWorker),std::ref(myValue));
// Wait for the timer to complete
//
// NOTE: The timer could be stopped at
// any point by calling myTimer.stopAndDetach()
// or by calling myTimer.stopAndJoin()
myTimer.join();
// Print out the value after the thread
// is done showing that the value was
// indeed changed
std::cout << "after thread is done, value = " << myValue << "\n\n\n";
// We're done
return 0;
}
//-------------------------------------------------------------------
The output from this program follows:
value = 1
value = 2
value = 3
value = 4
value = 5
after thread is done, value = 5