计时器

Android 定时器实现方式

≡放荡痞女 提交于 2020-04-10 21:03:12
在Android开发中,定时器一般有以下3种实现方法: 一、采用Handler与线程的sleep(long)方法 二、采用Handler的postDelayed(Runnable, long)方法 三、采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一、采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。 1. 定义一个Handler类,用于处理接受到的Message。 Handler handler = new Handler() { public void handleMessage(Message msg) { // 要做的事情 super.handleMessage(msg); } }; 2. 新建一个实现Runnable接口的线程类,如下: public class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub while (true) { try { Thread.sleep(10000);// 线程暂停10秒,单位毫秒 Message message =

手机网游实时同步方案

天大地大妈咪最大 提交于 2020-04-04 12:39:54
网络延迟是所有实时同步的游戏都会遇到的问题,下面是关于实时同步问题的一些思考和处理方法。具体的解决方法可能比较特殊,首先这里的服务器并不跑定时器(除了一个游戏结束倒计时的定时器),由前端驱动,延迟的情况下主要是由前端来预测或纠正,服务器辅助,处理和转发,据我的了解好像没什么人这样子搞吧。所以看完如果觉得我这边有考虑不周的,或者有更好的思路,欢迎拍砖 / 交流 首先这是一个两边出兵对攻的游戏,只有2个玩家,而战场上士兵/英雄的数量也不会太多,最多不会超过50个吧,士兵都是有AI的,不被玩家控制。玩家能做的操作很有限,这里只以出兵这个操作为例。在游戏开始的时候,会有一次校时操作,这个后面会说到。 玩家A在Tick1点出兵,播放各种出兵特效之后,Tick1 + Delay = Tick2,在Tick2这个时间才会真正出兵,Delay等于抬手时间,也就是一个允许的延迟时间,并不等于网络延迟,应该理解为一个前摇动画的播放时间,这个时间越长越好,在不影响玩家体验的前提下(例如弄一个士兵生产队列,从出兵指令发出到士兵生产完毕,这可需要不少时间)。 这时候玩家请求服务器,请求的内容包含Tick1 + 出兵指令,服务器收到指令,对服务器而言,这时可能有两种情况,第一种是在Tick2之前收到,第二种是在Tick2之后收到 在Tick2之前收到,服务器可以转发操作,告诉所有的客户端,我们在Tick2出兵

.NET提供了哪几个定时器类型

一笑奈何 提交于 2020-03-20 20:30:34
分析问题   在.NET内建类型中,一共为程序员提供了3种定时器:   1、System.Windows.Forms.Timer类型。   2、System.Threading.Timer类型。   3、System.Timers.Timer类型。   概况来说,这三种类型都实现了定时的功能。程序员通常需要做的是为定时器设置一个间断时间,设置定时到达时的处理方法,然后就可以等待定时器不断地计时和触发处理事件,现在笔者来分别介绍一下这三种类型的特点。   1、System.Windows.Forms.Timer类型   从这个定时器的命名空间可以看出,.NET设计这个类型的目的是为了方便程序员在Windows界面上使用定时器。当一个System.Windows.Forms.Timer类型被构造时,当前定时器会和当前线程进行关联。而当定时器的计时到达后,一个定时器消息将被插入到当前线程的消息队列中。当前线程将逐一处理消息队列中的所有消息,并一一派发给各自的处理方法。这样的机制和利用工作者线程进行定时有很大的区别,事实上,System.Windows.Forms.Timer类型并没有涉及多线程的操作,定时器的设置、定时方法的执行都在同一个线程上。 注意   这就意味着System.Windows.Forms.Timer并不能准确地定时,事实上,当消息阻塞时,定时器的误差将相当大

读书笔记之多线程——System.Thread.Timer

时间秒杀一切 提交于 2020-03-18 21:55:06
--居然工作很久都没有用过System.Thread.Timer。下面是在MSDN上的一些学习笔记。 首选是构造函数 : Timer(TimerCallback) //使用新创建的 Timer 对象作为状态对象,用一个无限周期和一个无限到期时间初始化 Timer 类的新实例。 Timer(TimerCallback, Object, Int32, Int32) //使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。 Timer(TimerCallback, Object, Int64, Int64) //用 64 位有符号整数来度量时间间隔,以初始化 Timer 类的新实例。 Timer(TimerCallback, Object, TimeSpan, TimeSpan)//初始化 Timer 类的新实例,使用 TimeSpan 值来度量时间间隔。 Timer(TimerCallback, Object, UInt32, UInt32) //用 32 位无符号整数来度量时间间隔,以初始化 Timer 类的新实例。 备注: 使用 TimerCallback 委托指定希望 Timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。 此方法不在创建计时器的线程上执行,而是在系统提供的 ThreadPool 线程上执行。 创建计时器时

console.time和console.timeEnd用法

◇◆丶佛笑我妖孽 提交于 2020-03-11 11:55:17
console.time 和 console.timeEnd 这两个方法可以用来让WEB开发人员测量一个javascript脚本程序执行消耗的时间。随着WEB应用越来越重要,JavaScript的执行性能也日益受到重视,WEB开发人员知道一些性能测试机器是必须的。今天要介绍的 console.time 和 console.timeEnd 就是其中之一。 console.time 方法是开始计算时间, console.timeEnd 是停止计时,输出脚本执行的时间。 // 启动计时器 console.time('testForEach'); // (写一些测试用代码) // 停止计时,输出时间 console.timeEnd('testForEach'); // 4522.303ms 这两个方法中都可以传人一个参数,作为计时器的名称,它的作用是在代码并行运行时分清楚各个计时器。对 console.timeEnd 的调用会立即输出执行总共消耗的时间,单位是毫秒。 测试JavaScript性能的方法有很多,但 console.time / timeEnd 两个方法是最基本、最直接的技巧。 来源: https://www.cnblogs.com/cangqinglang/p/8433197.html

秒表计时器

核能气质少年 提交于 2020-03-05 03:25:04
秒表计时器 制作一个秒表计时器,记录0-15秒时间。要求精准,可控。 1.能够用按键控制秒表开始 2.能够用按键控制秒表停止 3.能够用按键控制秒表清零 4.使用定时器控制时间,要求精确。 5.使用1个数码管和多个按键实现功能。 先根据需求判断所需的功能,再改变电路图 然后根据要求开始写代码 1 #include<reg52.h> 2 sbit an = P1^0; 3 sbit qing = P1^1; 4 unsigned int i = 0; 5 unsigned int s = 0; 6 code unsigned char LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; 7 void INT_T0(void) 8 { 9 TMOD = 0X01; //打开定时器0 ,使用模式1定时 10 TH0 = 0XFC; 11 TL0 = 0X18; //初始值 12 EA = 1;//打开总开关 13 ET0 = 1;//打开中断T0开关 14 } 15 void main(void) 16 { 17 INT_T0(); 18 TR0 = 0; //定时功能关闭 19 while(1) 20 { 21 if(an == 0) 22 TR0

秒表计时器

岁酱吖の 提交于 2020-03-05 03:24:06
秒表计时器 制作一个秒表计时器,记录0-15秒时间。要求精准,可控。 1.能够用按键控制秒表开始 2.能够用按键控制秒表停止 3.能够用按键控制秒表清零 4.使用定时器控制时间,要求精确。 5.使用1个数码管和多个按键实现功能。 代码如下: #include<reg52.h> #define LED P0 sbit KEY1 = P1^0; sbit KEY2 = P1^1; unsigned int i = 0; unsigned char LED_NUM[] = {0xc0,0xf9,0xa4,0xb0,\ 0x99,0x92,0x82,0xf8,\ 0x80,0x90,0x88,0x83,\ 0xc6,0xa1,0x86,0x8e}; unsigned char n = 0; void INT_T0(void) { TMOD = 0X01; //打开定时器0 ,使用模式1定时 TH0 = 0XFC; TL0 = 0X18; //初始值 EA = 1;//打开总开关 ET0 = 1;//打开中断T0开关 } void main(void) { INT_T0(); TR0 = 0; //定时功能打开 while(1) { if(KEY1==0) { TR0 = 1; } if(KEY2==1) { i = 0; n = 0; } } } void time0(void)

Boost学习笔记(二) 时间与日期

拜拜、爱过 提交于 2020-03-04 17:08:56
timer库概述 timer库包含三个组件:分别是计时器类timer、progress_timer和进度指示类progress_display timer 主要作用是计时,精确度是毫秒级。下面是一个简单的例子 #include <boost\timer.hpp> #include <iostream> using namespace boost; using namespace std; int main() { timer t; //声明一个计时器,开始计时 cout<<"max timespan:"<<t.elapsed_max()/3600<<"h"<<endl;//最大可度量时间,小时 cout<<"min timespan:"<<t.elapsed_min()<<"s"<<endl;//最小可度量时间,秒 cout<<"now time elapsed:"<<t.elapsed()<<"s"<<endl; //输出已经流逝的时间 } 注意,timer对象一旦被声明,它的构造函数就启动了计时工作 使用建议,timer不适合高精度的时间测量任务,它的精度依赖于操作系统(windows是毫秒,linux是微秒)或编译器,难以做到跨平台。timer也不适合大跨度时间段的测量,最大为几百小时。 来源: https://www.cnblogs.com/zzu-liulei/p

我如何使用NSTimer?

…衆ロ難τιáo~ 提交于 2020-03-01 16:17:44
我如何使用 NSTimer ? 谁能给我一步一步的指示? #1楼 像这样的东西: NSTimer *timer; timer = [NSTimer scheduledTimerWithTimeInterval: 0.5 target: self selector: @selector(handleTimer:) userInfo: nil repeats: YES]; #2楼 首先,我想提请你注意Cocoa / CF文档(它始终是一个很棒的第一个调用端口)。 Apple文档在每篇参考文章的顶部都有一个名为“Companion Guides”的部分,其中列出了所记录主题的指南(如果存在)。 例如,使用 NSTimer , 文档 列出了两个配套指南: Cocoa的计时器编程主题 线程编程指南 对于您的情况,定时器编程主题文章可能是最有用的,而线程主题是相关的,但不是与所记录的类最直接相关。 如果你看一下Timer Programming Topics的文章,它分为两部分: 计时器 使用计时器 对于采用这种格式的文章,通常会有类的概述及其用途,然后是一些关于 如何 使用它的示例代码,在本例中是“使用计时器”部分。 有关“创建和调度定时器”,“停止定时器”和“内存管理”的部分。 从文章中,创建一个计划的,非重复的计时器可以这样做: [NSTimer

C语言获取SYSTEMTIME

╄→尐↘猪︶ㄣ 提交于 2020-03-01 04:55:10
C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒 3 计算时间差使用double difftime( time_t timer1,time_t timer0 ) 4 使用DWORD GetTickCount() 精确到毫秒 5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒 6 要获取高精度时间,可以使用 BOOLQueryPerformanceFrequency(LARGE_INTEGER lpFrequency) 获取系统的计数器的频率 BOOLQueryPerformanceCounter(LARGE_INTEGER lpPerformanceCount) 获取计数器的值 然后用两次计数器的差除以Frequency就得到时间。 7 Multimedia Timer Functions The following functions areused with multimedia timers. timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime // ************************