需要一个定时器,想需要的功能有异步或者同线程阻塞式,直接上代码
#pragma once
#include<functional>
#include<chrono>
#include<thread>
#include<atomic>
#include<memory>
#include<mutex>
#include<condition_variable>
class Timer{
public:
Timer() :expired_(true), try_to_expire_(false){
}
Timer(const Timer& t){
expired_ = t.expired_.load();
try_to_expire_ = t.try_to_expire_.load();
}
~Timer(){
Expire();
}
void StartTimer(int interval, std::function<void()> task){
if (expired_ == false)
{
return;
}
expired_ = false;
std::thread([this, interval, task]()
{
while (!try_to_expire_)
{
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
task();
}
{
std::lock_guard<std::mutex> locker(mutex_);
expired_ = true;
expired_cond_.notify_one();
}
}).detach();
}
void Expire(){
if (expired_)
{
return;
}
if (try_to_expire_