让我们有一个类,它创建一个线程并让我们运行一个无限循环来检查一个que。在这个线程中,我想定期调用类的一个函数(处理来自que的累积数据,例如每100毫秒)。
我已经组装了一个基于aswers的计时器 https://stackoverflow.com/a/14665230/1699328和https://stackoverflow.com/a/21058232 但是,我不知道,如何从对象中调用一个函数,从而创建了该线程。计时器如下:
#include <thread>
class TimerSimpleInfinite
{
public:
template <class callable, class... arguments>
TimerSimpleInfinite(int interval, callable&& f, arguments&&... args)
{
std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
execute = true;
std::thread([this, interval, task]()
{
while (execute)
{
task();
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
}
}).detach();
}
void Cancel()
{
execute = false;
}
private:
bool execute;
};
我想要实现的想法是调用成员类函数,如下面的代码片段所示:
// separated thread
void Processor::Run()
{
// start timer - call member class function every 100 ms
Timer timer(100, this, &Processor::EvaluateData);
Data datata;
while (sharedQueData.Dequeue(data))
{
// preprocess data...
std::lock_guard<std::mutex> lock(mutex);
mVector.insert(data);
}
}
// member class function to be called every 100 ms by timer
void Processor::EvaluateData()
{
std::lock_guard<std::mutex> lock(mutex);
// do anything with mVector
}
该计划必须由VS 2013编制。