c11 定时器

#ifndef MINGHAI_BASE_DEADLINE_TIMER_H
#define MINGHAI_BASE_DEADLINE_TIMER_H

#if defined (_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif
#include "minghai/minghai_global.h"
#include <thread>
#include <chrono>
#include <functional>
#include <cassert>
namespace minghai
{
	namespace base {
		class deadline_timer
		{
			typedef std::function<void()> function_type;
		public:
			deadline_timer() {}
			~deadline_timer() {}
			template<typename callable, class... arguments>
			void AsyncWait(int after, callable&& f, arguments&&... args) {				
				std::function<typename std::result_of<callable(arguments...)>::type()> task
				(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));

				std::thread([after, task]() {
					assert(nullptr != task);
					std::this_thread::sleep_for(std::chrono::milliseconds(after));
					task();
				}).detach();
			}
			void AsyncWait(int after, const function_type &func) {				
				std::thread([after, func]() {
					assert(nullptr != func);
					std::this_thread::sleep_for(std::chrono::milliseconds(after));
					func();
				}).detach();
			}
			template<typename callable, class... arguments>
			void SyncWait(int after, callable&& f, arguments&&... args) {
				std::function<typename std::result_of<callable(arguments...)>::type()> task
				(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
				std::this_thread::sleep_for(std::chrono::milliseconds(after));
				assert(nullptr != task);
				task();
			}
			void SyncWait(int after, const function_type &func) {
				assert(func != nullptr);
				std::this_thread::sleep_for(std::chrono::milliseconds(after));
				func();
			}

		};
	}
}

#endif  // MINGHAI_BASE_DEADLINE_TIMER_H

 

转载于:https://my.oschina.net/u/1426828/blog/1824208

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值