仿DelayTime定时器

#include"iostream"
#include"windows.h"
#include "functional"
#include "time.h"
#include "math.h"
using namespace std;

class Ref
{

};

class DelayTime: public Ref
{
public:
	static DelayTime*create(float time, const function<void(void)> &f)
	{
		auto ss = new DelayTime;
		ss->func = f;
		ss->time = time*60;
		return ss;
	}

	function<void()> func;

	void run( )
	{
		func();
	}

	float time;
	float nowTime = 0;

};
int a = 0, b = 0;

class FrameManger :public Ref
{
public:
	FrameManger()
	{
		for (int i = 0; i < 100; i++)
		{
			queue[i] = nullptr;
		}
	}
	void addChild(DelayTime *pChild)
	{
		queue[count++] = pChild;

	}
	void Loop()
	{
		Sleep(rand()%5);
		for (int i = 0;i<count;i++)
		{

			if (queue[i] == nullptr)return;
			queue[i]->nowTime++;
			if (queue[i]->nowTime >= queue[i]->time)
			{
				 queue[i]->run();
				 cout << "    "<<clock()-a<<endl;
				 queue[i]->nowTime = 0;
				 a = clock();

			}
		}

	}
	 DelayTime* queue[100];
	 int count = 0;
};

int main()
{

	FrameManger*fr = new FrameManger;

	fr->addChild(DelayTime::create(1.0, [=]{cout << "callback_1"; }));
	fr->addChild(DelayTime::create(2.0, [=]{cout << "callback_2"; }));

	a = clock();

	LARGE_INTEGER nFreq;
	LARGE_INTEGER nLast;
	LARGE_INTEGER nNow;
	long long Interval;

	QueryPerformanceFrequency(&nFreq);
	Interval = (long long)(1/60.0 * nFreq.QuadPart);
	cout << "x=" << nFreq.QuadPart << endl;
	QueryPerformanceCounter(&nLast);
	while (1)
	{
		QueryPerformanceCounter(&nNow);
		if (nNow.QuadPart - nLast.QuadPart >Interval)//计算cpu频率计数差值
		{
			nLast.QuadPart = nNow.QuadPart;
			fr->Loop();
		}
		else
		{
			Sleep(0);
		}

	}

	system("pause");
	return 0;
}
时间: 2024-10-22 22:41:12

仿DelayTime定时器的相关文章

最新最全的 Android 开源项目合集

原文链接:https://github.com/opendigg/awesome-github-android-ui 在 Github 上做了一个很新的 Android 开发相关开源项目汇总,涉及到 Android 开发的方方面面,基本很全了.对 Android 开发感兴趣的欢迎 Star ,后续也会定期维护更新这个列表.当然,你也可以去 opendigg 上查看. -- 由欧戈分享 awesome-github-android-ui 是由OpenDigg整理并维护的安卓UI相关开源项目库集合.

Android UI相关开源项目库汇总

最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. 抽屉菜单 MaterialDrawer ★7337 - 安卓抽屉效果实现方案 Side-Menu.Android ★3865 - 创意边侧菜单 FlowingDrawer ★1744 - 向右滑动流动抽屉效果 SlidingRootNav ★1338 - 仿DrawerLayout的View

Swift3.0 GCD定时器的使用,实现倒计时,UIDatePicker的使用, 仿写一个活动倒计时的DEMO

直接看主要代码 //截止日期 let endDate = datePicker.date //开始日期 let startDate = Date() //时间间隔 let timeInterval:TimeInterval = endDate.timeIntervalSince(startDate) if timer == nil { //剩余时间 var timeout = timeInterval if timeout != 0 { //创建全局队列 let queue = Dispatch

JS之定时器函数

1.倒计时定时器 timename=setTimeout("function()",delaytime); clearTimeout(timename); 2.循环定时器 timename=setInterval("function()",delaytime); clearTimeout(timename);

Android -- 桌面悬浮,仿360

实现原理                                                                               这种桌面悬浮窗的效果很类似与Widget,但是它比Widget要灵活的多.主要是通过WindowManager这个类来实现的,调用这个类的addView方法用于添加一个悬浮窗,updateViewLayout方法用于更新悬浮窗的参数,removeView用于移除悬浮窗.其中悬浮窗的参数有必要详细说明一下. WindowManager

浅谈asp.net通过本机cookie仿百度(google)实现搜索input框自动弹出搜索提示

对于通过用户输入关键词实现自动弹出相关搜索结果,这里本人给两种解决方案,用于两种不同的情形. 常见方法是在数据库里建一个用户搜索关系表,然后通过用户搜索框输入的关键字异步调用数据表中的相关数据,显示在一个隐藏div中. 第二种方式也就是我现在着重讨论的方式,适用于单个用户,基于此用户以往的搜索数据来实现搜索提示功能.技术关键是记录下用户的以往搜索数据,写入cookie,然后页面从用户本机cookie调用数据. ok,下面进入正题.本文主要讲实现步骤,代码可根据自己实际需要更改. 一,如何写入co

完美拖拽 &amp;&amp;仿腾讯微博效果&amp;&amp; 自定义多级右键菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

Android应用系列:仿MIUI的Toast动画效果实现(有图有源码)

前言 相信有些人用过MIUI,会发现小米的Toast跟Android传统的Toast特么是不一样的,他会从底部向上飞入,然后渐变消失.看起来效果是挺不错的,但是对于Android原生Toast是不支持自定义动画的.那这个效果到底是怎么实现的呢?下面就来告诉你.... 分析 如果园友看过我的另一篇博客<Android:剖析源码,随心所欲控制Toast显示>,就会知道其实原生Toast就是infate出一个View实例,然后将其加载到WindowManager上面来达到显示效果.我们很多人都知道W

Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)

转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该广播的携带者一个Action名为MEDIA_BUTTON的Intent.监听该广播便可以获取手机的耳机媒体按键的单击事件. 在Android中有个AudioManager类,该类会维护MEDIA_BUTTON广播的分发,所以要实现耳机按键监听需要向AudioManager注册一个用于接收耳机按键单击