精华内容
下载资源
问答
  • 设计一个计时器

    千次阅读 2010-08-11 22:12:00
    设计一个函数,当我们调用这个函数时,取得程序运行后一共经历了多少时间。   思考: 只要我们在程序启动时,记录一个时间做为时间基数BaseTime。在调用函数的时候,用户当前时间减去启动时的时间...

    1、Time();

    设计一个函数,当我们调用这个函数时,取得程序运行后一共经历了多少时间。

     

    思考: 只要我们在程序启动时,记录一个时间做为时间基数BaseTime。在调用函数的时候,用户当前时间减去启动时的时间。就可以得到经过了多少时间。

               需要注意的问题是,如果你的程序设计了暂停功能,在暂停阶段的时间,是不应该算做程序运行时间的。所以Time()返回的时间应该再减去这个时间。我们可以用户另一个时间比如:stoptime来记录程序一共暂停了多少时间。一个更好的方法是,在BaseTime中增加暂停的时间。

     

    ---------------------------------------------------------------------------------------------------------》

         |                |                |              |               |                |              |               |

       5ms           15ms        25ms        35ms       45ms        55ms      65ms        75ms

    程序启动        程序暂停      再启动     程序暂停      再启动      程序结束

     

    程序启动时,我们记录一个时间BaseTime,这时BaseTime=5;

    当程序暂停时,我们记录另一个值stoptime = 15;

    当程序再启动时,我们用当前时间25ms减去stoptime时间15,得到10,这是程序暂停了多少时间,我们只要把这个时间加到baseTime里。而每一次暂停时,我们都如此做。这样就等于把所有的暂时时间都叠加到basetime里了,当程序结束时,我们只要减去baseTime,就等于减去了 程序启动时间+程序一共暂时的时间。这就得到了程序运行的准确时间。

     

     

     

     

    展开全文
  • Unity计时器设计 - 基础计时器

    万次阅读 2017-01-19 16:41:11
    设计一个计时器,可用于动画、BUFF、延时函数等各种和时间相关的操作和类设计

    Unity计时器设计 - 基础计时器

    在Unity中,Time类的功能较少,例如Time.time在Awake等函数中无法获取,并且没有计时器概念等,大部分项目有计时器的需求,这篇文章将实现一个自己定义的计时器。


    在开始写代码之前,先总结需求:

    计时器应当具有以下操作:

    • 设置计时器
    • 开始和取消计时器
    • 暂停和继续计时器
    • 重置计时器
    • 一系列事件(OnStart,OnUpdate,OnCancel,OnEnd等)。

    并且具有这些属性:

    • 计时器时间:开始、剩余、到时、总时长。
    • 计时器状态:未开始,运行中,暂停中。

    设计完以上内容后,可以做这些事情:

    • 延时函数
    • 一切基于时间执行的概念,例如技能,类似cocos2d-x的动作系统等。
    • 很多情况下,计时器不希望随挂载对象被销毁时消失,所以Timer不继承于MonoBehaviour。

    总结完可以开始写了。
    首先,添加引用

    using UnityEngine;
    using System;

    可以运行的最基础的计时器:

    //注意不继承于MonoBehavior
    public class Timer
    {
        //开始时间
        public float StartTime { get; private set; }
        //持续时间
        public float Duration { get; private set; }
        //结束时间
        public float EndTime { get; private set; }
        //当前时间
        public float CurTime { get; private set; }
    
        //运行标识
        public bool IsStart { get; private set; }
    
        //开始和结束事件,这里直接用System.Action(相当于空返回值无参数委托)
        public Action OnStart { get; set; }
        public Action OnEnd { get; set; }
        public Action OnUpdate { get; set; }
    
        //构造函数,设置计时器
        public Timer(float duration)
        {
            Duration = duration;
        }
    
        //开始计时 Timer类不继承于MonoBehaviour,该方法不会在任何对象开始时被调用。
        public void Start()
        {
            IsStart = true;
            StartTime = Time.time;
            CurTime = StartTime;
            EndTime = StartTime + Duration;
            if(OnStart != null) OnStart();
        }
    
        //更新时间,并检查状态。Timer类不继承于MonoBehaviour,该方法将在中心计时器每帧调用。
        public void Update()
        {
            if (!IsStart) return;
            CurTime += Time.deltaTime;
            if(CurTime > EndTime)
            {
                End();
            }
            else if (OnUpdate != null) OnUpdate();
        }
    
        //计时器结束
        void End()
        {
            IsStart = false;
            if(OnEnd!= null) OnEnd();
        }
    }
    • 新增取消
    //取消事件
    public Action OnCancel { get; set; }
    
    //取消接口。
    public void Cancel()
    {
        IsStart = false;
        if(OnCancel != null) OnCancel();
    }
    • 新增暂停和继续
    //事件
    public Action OnPause { get; set; }
    public Action OnContinue { get; set; }
    
    //属性
    public bool IsPause { get; private set; }
    
    //取消接口
    public void Pause()
    {
        IsPause = false;
        if(OnCancel != null) OnCancel();
    }
    
    //继续接口
    public void Continue()
    {
        IsPause = true;
        if(OnContinue!= null) OnContinue();
    }
    
    //Update逻辑需要更改
    public void Update()
    {
        if (!IsStart) return;
        CurTime += Time.deltaTime;
        if(IsPause) EndTime += Time.deltaTime;
        if(CurTime > EndTime)
        {
            End();
        }
        else if (OnUpdate != null) OnUpdate();
    }
    • 新增重置
    //重置接口
    public void Reset()
    {
        IsStart = false;
        IsPause = false;
    }

    一个简单的计时器就这样完成了。
    但是我们往往需要获取计时器的各种属性,下面新增一些public属性:

    • 计时器已经完成的百分比,常用于
    public float Ratio
    {
        get
        {
            if(!IsStart)
            {
                return 0;
            }
            else
            {
                return 1 - (EndTime - CurTime) / Duration;
            }
        }
    }
    • 计时器次数,可用于循环计时、检测是否已经完成等。(常规循环计时推荐新定义循环计时器)
    //开始次数
    public int StartCount { get; private set; }
    //完成次数
    public int FinishCount { get; private set; }
    
    //Start修改
    public void Start()
    {
        IsStart = false;
        StartTime = Time.time;
        CurTime = StartTime;
        EndTime = StartTime + Duration;
        //新增这一行↓
        StartCount++;
        if(OnStart != null) OnStart();
    }
    
    //End修改
    void End()
    {
        IsStart = true;
        //新增这一行↓
        FinishCount++;
        if(OnEnd!= null) OnEnd();
    }

    简单的计时器设计完成啦!
    但是还不可以运行,毕竟Update还不会主动调用。

    我们可以先简单写一个中心计时器来解决问题:
    新建CenterTimer.cs:

    using UnityEngine;
    using System.Collections.Generic;
    
    //因为中心计时器应该只有一个,所以所有新定义的成员都应该为静态成员。
    public Class CenterTimer : MonoBehaviour
    {
        static List<Timer> timers = new List<Timer>();
    
        //添加计时器
        public static void AddTimer(Timer timer)    
        {
            timers.Add(timer);
        }
    
        //移除计时器
        public static void RemoveTimer(Timer timer)
        {
            timers.Remove(timer);
        }
    
        //每帧更新
        void Update()
        {
            foreach(var timer in timers)
            {
                timer.Update();
            }
        }
    }

    同时对Timer类做一点点修改:

    public void Start()
    {
        IsStart = true;
        StartTime = Time.time;
        CurTime = StartTime;
        EndTime = StartTime + Duration;
        //新增这一行↓
        CenterTime.AddTimer(this);
        StartCount++;
        if(OnStart!= null) OnStart();
    }
    
    //计时器结束
    void End()
    {
        IsStart = false;
        if(OnEnd!= null) OnEnd();
        //新增这一行↓
        CenterTimer.RemoveTimer(this);
    }
    
    public void Reset()
    {
        IsStart = false;
        IsPause = false;
        //新增这一行↓
        CenterTimer.RemoveTimer(this);
    }

    使用方法如下:
    Test.cs 挂在一个GameObject上
    CenterTimer.cs 挂在摄像头上。

    using UnityEngine;
    
    public class Test : MonoBehaviour
    {
        Timer timer;
        void Update()
        {
            if(Input.GetKeyDown(KeyCode.T))
            {
                timer = new Timer(3f);
                timer.OnUpdate += SetScale;
                timer.OnEnd += Hide;
                timer.Start();
            }
        }
    
        //缩放动画
        void SetScale()
        {
            float scale = 1 - timer.Ratio;
            gameObject.transform.localScale = new Vector3(scale, scale, scale);
        }
    
        void Hide()
        {
            gameObject.SetActive(false);
        }
    }

    执行游戏并按下T键,我们可以看到该对象在3秒内从大变小到完全消失。

    展开全文
  • 自己制作一个计时器、倒计时器

    千次阅读 2020-11-30 10:12:00
    时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。制作计时器对我们越来越重要。 本程序的编写环境是VC++6.0,目前此程序实现了...每次只能执行一个功能。

    计时器和倒计时器的设计与实现

    摘 要
    时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。制作计时器对我们越来越重要。

    本计时器中的倒计时使用的for函数输出把时间用00:00:00这种格式输出,使用Sleep来让整个程序暂停一秒,来完成计时一秒的功能,然后用/r覆盖掉上一行输出一秒后的剩余倒计时,在倒计时变为00:00:00时,输出时间到并用/a响铃。计时器采用类似的计时方法,不一样的是这次使用system(“cls”)清屏,然后重新输出下一次时间,用函数kbhit确定是否有键盘敲击,如果有将其录入,当这个值和所确定的停止值相同时,将退出for函数,停止计时,并输出时间。

    本程序的编写环境是VC++6.0,目前此程序实现了计时器和倒计时器的功能。每次只能执行一个功能。
    关键词: vc6.0,C语言,函数,计时器,倒计时器。

    1 引言

    1.1关于工程实践

    在我看来,整个工程实践中是让我们了解程序设计的整个流程,以及怎么实现这项功能,如何利用所学的c语言知识,来完成一个属于自己的小程序,小软件,在其中遇到的问题将其总结,最后将成为很好的学习笔记。

    1.2 课题背景

    经过一个学期的C语言课程学习,我们已经掌握了基本的C语言编程,而如何使用这些编程知识,让其变得有用十分重要。于是我们想到了开发一个计时倒计时的小程序。

    在人们生活中,时间是很重要的一种东西。无论什么都离不开时间。倒计时和计时更是如此。通过倒计时计算考试时间,计算煮饭煮菜的时间,通过计时计算跑步时间,计算做题讲课的时间。时间观念对我们来说越来越重要,制作计时器对我们也越来越重要,所以让我们来看看如何制作一个计时装置,即一个计时器和一个倒计时器。

    2 需求分析

    2.1程序目标

    完成一个简单的计时器和倒计时器,要求实现最基本的计时和倒计时程序,当用户打开程序后通过提示输入数字1 2 3进行三种操作。

    (1)输入数字1进行倒计时操作,通过输入00:00:00这种格式的时间倒计时,在时间到的时候提示“时间到!”,同时响铃。
    (2)输入数字2进行计时器操作,通过提示进入计时程序,并通过按Esc键停止计时,并输出计时时间。

    2.2 开发环境及工具

    2.2.1 运行环境

    Windows10
    也可以在一台内存大于800k内存的位系统电脑运行。

    2.2.2 编程软件介绍

    Microsoft Visual C++60.:调用系统文件#include <stdio.h>实现输入输出、#include <stdlib.h>使用退出exit函数、#include <time.h>读取系统时间通过结构体time_t实现、#include <Windows.h>

    3 系统总体结构设计

    3.1 基本简介

    本程序分为四个模块,除了程序的main函数以外,分别分为面板,计时和倒计时三部分。其中面板模块就是呈现给用户的主界面,计时模块负责实现记录在给定时间之间的时间长度,以及开始计时和结束计时的输入输出,而倒计时则是专门负责在倒计时的时间录入和时间到时的提示以及响铃。
    下面是程序流程图:
    程序流程图

    3.2 系统功能模块及设计

    3.2.1 数据结构设计

    主体程序中设计除了选择以外,输出“输入错误”的程序后可以重新输入选择。

    在这里插入图片描述

    3.2.2 面板模式介绍

    进入程序后,输出:

    “计时器&&倒计时器
    本程序是由网络空间安全学院学生工程实践研发
    ==== 计时方式 ====
    1. 倒计时器
    2. 计时器
    请输入你选择的代号:”

    几行字样。

    通过用户输入1 或 2来控制进入计时器还是倒计时器,如果用户不小心输入错误将提示“不好意思选错咯~”并在此进行选择,面板模块只是起到将其他模块链接起来的作用,在后期需要追加更多功能时也可以由面板模块连接。

    3.2.3 倒计时器模块介绍

    倒计时器将承担输入时间并进行倒计时的功能,用户将在此模块界面直接输入格式为“00:01:09”的时间进行倒计时,输入正确时间正确,将输出“倒计时开始!”,当时间变成“00:00:00”时,输出“时间到!”并响铃,之后按任意键退出程序。

    3.2.4 计时器模块介绍

    计时器将承担计算从用户输入开始标记到用户输入结束标记之间的时间的功能,用“计时时长为:00:00:05”的格式输出所计的时间。

    4 系统详细设计与实现

    4.1界面模块设计与实现

    作为最简单的计时和倒计时程序,使用vc6.0的默认程序窗口。

    4.2 模块设计与实现

    4.2.1主体模块设计与实现

    在主体之前定义其他模块的函数。通过while函数实现如果输入错误那么便接受用户的重新输入选择,通过switch函数选择进入计时器功能的函数还是倒计时器功能的函数。作为main函数,在之后追加函数或修改时更加容易。

    4.2.2 面板模块设计与实现

    进入程序后,由面板模块的函数通过printf函数输出边界图形字符以及欢迎界面,并介绍该程序选择方法(输入数字1 or 2)具体如下图。提示用户进行输入,之后通过while函数和switch函数进行选择。(while函数用于当输入错误时可以重新输入)
    在这里插入图片描述

    4.2.3 倒计时器模块的设计与实现

    倒计时器的代码在面部模式的函数中,通过printf输出提示输入倒计时时间(格式:00:01:08),当输入正确后,输出“倒计时开始”并输出“00:01:08”格式一秒一秒减少的时间,当时间变为“00:00:00”时,响铃并输出“时间到!”三字。

    在这里插入图片描述在这里插入图片描述

    4.2.4 计时器模块设计与实现

    模块分为两部分,一部分在主体函数里通过输入选择计时模式开始计时,然后进入计时器函数,用Sleep和system(”cls”)和while循环通过(00:00:00)格式下秒数分钟数,进行计时,通过函数kbhit、if、getch停止计时跳出循环,完成计时。

    在这里插入图片描述在这里插入图片描述

    5 系统测试与分析

    5.1 测试

    根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本或网络的参考下能够修改。主要是平时看书不仔细、不太注意而产生的。如没有注意具体数据使用。

    5.2 调试过程中遇到的主要问题

    if,while,switch三个循环中容易缺少括号,进行修改后括号更加容易出错。这直接导致在vc中编译时出现很多错误。
    time_t结构体出现在#include <time.h>头文件里。
    <conio.h>头文件用来 kbhit getch
    <Windows.h>头文件用来 sleep

    结论

    经过了四个星期的c语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计时器和倒计时器的设计修改任务。
    程序设计期间,学习到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。我通过网上查找到很多成功的关于计时器倒计时器的程序,通过对那些已经成功的程序进行分析找到自己的设计思路,制定设计流程。通过对网现存的计时器倒计时器的比对,我发现我自己做的程序显得十分简陋,但是这个程序也是我通过完整的设计流程设计出的程序。
    限于作者知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。

    参考文献

    [1] 黄明等.21世纪进阶辅导 C语言程序设计.大连理工大学出版社,2005
    [2] 马靖善等.C语言程序设计.清华大学出版社,2005

    附录:

    程序下载:

    程序下载地址(exe)

    代码

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <time.h>
    
    #include<conio.h>//kbhit getch
    
    #include <Windows.h>//用于sleep
    
    int daojishi();
    
    int jishiqi();
    
    int main ()
    {  
        int c;
    
    	printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠     计时器&&倒计时器     ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    
    	
    	printf("本程序是由网络空间安全学院学生工程实践研发\n");
    
        
    	printf("====计时方式====\n");  
        
    	printf("1. 倒计时器\n");  
        
    	printf("2. 计时器\n");  
    
        
    	printf("请输入你选择的代号:");  
        
    	scanf("%d", &c);  
    
    
        while(c!=1&&c!=2){
    	
    	printf("不好意思选错咯~\n");
    	
    	printf("====计时方式====\n");  
        
    	printf("1. 倒计时器\n");  
    
        printf("2. 计时器\n"); 
    	
        printf("请输入你选择的代号:");
    
    	scanf("%d", &c);
    	}
    
    
    	switch(c)  
        {  
        case 1: 
    		 daojishi();
    
            break;
    		
        case 2: 
    			jishiqi();
    
            break; 
    	
    	}
        
    	return 0;  
    
    }
    
    
    
    
    int daojishi()
     {
    	int i,j,k;
    
    	int hour=0,min=0,sec=0;
    
    
    	printf("请输入倒计时时间(例如:01:26:30):");
    
    
    	scanf("%d:%d:%d", &hour, &min, &sec);
    
    
    	if(hour>24 || hour<0 || min>60 || min<0 || sec>60 || sec<0)
    	{
    
    		printf("输入有误!\n");
    
    		return 0;
    
    	}	
    
    	printf("倒计时开始!\n");
    
    
    
    	for(i=hour; i>=0; i--)
    	 {
    
    		for(j=min; j>=0; j--)
    		{
    	
    			for(k=sec; k>=0; k--)
    			{
    
    				printf("\r%02d:%02d:%02d", i, j, k);
    
    				Sleep(1000);
    
    			}
    
    			sec = 59;
    
    		}	
    
    			min = 59;
    
    	}
    
    	printf("\a\n时间到!\n");//倒计时结束后响铃
    
    	exit(0);
    
    }
    
    
    
    int jishiqi()
    {
    	
    	int hour = 0, min = 0, sec = 0,n;    
    	
    	while (n!=32)
    		{
    
    			if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n
    			
    			n=getch();
    			
    			while(n==32){
    			
    				exit(0);	
    			}
    		
    		}
    		
    
    		Sleep(1000);//暂停1s        
    	    
    		system("cls");//清屏
            
    		
    		printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠     计时器&&倒计时器     ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    	
    		
    		printf("本程序是由网络空间安全学院学生工程实践研发\n");
    		
    		
    		printf("====计时方式====\n");  
    	    
    		printf("1. 倒计时器");
    
    		printf("\n");
    	    
    		printf("2. 计时器");  
    
    		printf("\n");
    		
    		printf("请输入你选择的代号:2");
    
    		printf("\n");
    		
    		printf("按空格停止计时");
    
    		printf("\n");
    
    
    	    sec++;      
    
    
    	    if (sec == 60)
    		{            
    		
    			min++;            
    		   
    			sec = 0;       
    		}        
    	    if (min == 60)
    		{            
    	
    			hour++;            
    		   
    			min = 0;        
    		}        
    	    if (hour == 24)
    		{            
    		   
    			hour = 0;        
    		}        
    	    
    		printf("%02d:%02d:%02d\n", hour, min, sec); //%02d输出长度为2,不足2前面补0    
    		
    		
    		if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n
    			
    			n=getch();
    			
    			while(n==32){
    			
    				exit(0);	
    			}
    		
    		}
    
    	}
    
        return 0;
    }
    
    
    展开全文
  • 本文主要总结一个自定义的计时器(不是定时器),该计时器每个一秒钟刷新一次。博主封装一个函数timeCounter(),获取每一秒的时分秒数值,封装函数返回值是一个QStringList值,里面依次返回时、分、秒三个值;封装...

    本文主要总结一个自定义的计时器(不是定时器),该计时器每个一秒钟刷新一次。博主封装一个函数timeCounter(),获取每一秒的时分秒数值,封装函数返回值是一个QStringList值,里面依次返回时、分、秒三个值;封装函数代码如下:

    QStringList Widget::timeCounter()
    {
        /*最多计算:24天=2073600000ms,也就是576小时*/
        int elapsed = time->elapsed()/1000;
        short int hour = 0;
        short int minute = 0;
        short int second = 0;
        if(elapsed>=3600)
        {
            /*n hour*/
            hour=elapsed/3600;
            elapsed =elapsed%3600;
        }
        else if(elapsed>=60)
        {
            /*n minute*/
            minute=elapsed/60;
            second =elapsed%60;
        }
        else if(elapsed<60)
        {
            /*n second*/
            second =elapsed;
        }
        return QStringList()<<tr("%1").arg(hour)<<tr("%1").arg(minute)<<tr("%1").arg(second);
    }

    具体的工程示例如下所述。

     

    1.1新建一个widget工程,不要勾选ui界面。然后分别在widget.h、widget.cpp、main.cpp分别添加如下代码。

    widget.h

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include <QStringList>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
        QStringList timeCounter();
    
    private:
        void setupUI();
    
        QTime *time;
        QTimer *timer;
    
    private slots:
        void slot_startedTimer_clicked(bool);
        void slot_stopedTimer_clicked(bool);
        void slot_timer_timeout();
    };
    
    #endif // WIDGET_H
    

     

    widget.cpp

    #include "widget.h"
    #include <QVBoxLayout>
    #include <QPushButton>
    #include <QDateTime>
    #include <QTime>
    #include <QDate>
    #include <QTimer>
    #include <QDebug>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        setupUI();
    }
    
    Widget::~Widget()
    {
    }
    
    void Widget::setupUI()
    {
        QVBoxLayout* mainLayout = new QVBoxLayout;
        mainLayout->setMargin(0);
        mainLayout->setSpacing(0);
        QPushButton *startedTimer = new QPushButton(tr("计时器start"));
        connect(startedTimer,SIGNAL(clicked(bool)),this,SLOT(slot_startedTimer_clicked(bool)));
        QPushButton *stopedTimer = new QPushButton(tr("计时器stop"));
        connect(stopedTimer,SIGNAL(clicked(bool)),this,SLOT(slot_stopedTimer_clicked(bool)));
        mainLayout->addWidget(startedTimer);
        mainLayout->addWidget(stopedTimer);
        mainLayout->addStretch();
    
        this->setLayout(mainLayout);
    
        /*初始化时间*/
        time = new QTime();
        timer = new QTimer();
        connect(timer,SIGNAL(timeout()),this,SLOT(slot_timer_timeout()));
    }
    
    void Widget::slot_startedTimer_clicked(bool)
    {
        qDebug()<<tr("开启计时器");
        time->start();
        timer->start(1000);
    }
    
    void Widget::slot_stopedTimer_clicked(bool)
    {
        qDebug()<<tr("停止计时器");
        timer->stop();
    }
    
    void Widget::slot_timer_timeout()
    {
        qDebug()<<timeCounter();
    }
    
    QStringList Widget::timeCounter()
    {
        /*最多计算:24天=2073600000ms,也就是576小时*/
        int elapsed = time->elapsed()/1000;
        short int hour = 0;
        short int minute = 0;
        short int second = 0;
        if(elapsed>=3600)
        {
            /*n hour*/
            hour=elapsed/3600;
            elapsed =elapsed%3600;
        }
        else if(elapsed>=60)
        {
            /*n minute*/
            minute=elapsed/60;
            second =elapsed%60;
        }
        else if(elapsed<60)
        {
            /*n second*/
            second =elapsed;
        }
        return QStringList()<<tr("%1").arg(hour)<<tr("%1").arg(minute)<<tr("%1").arg(second);
    }
    

     

    main.cpp

    #include "widget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.resize(960,640);
        w.show();
    
        return a.exec();
    }
    

     

    1.2程序构建和运行结果如下图所示:

     

     

     

    参考内容:

    https://blog.csdn.net/founderznd/article/details/51442629(参考:QTimer和QTime)

    https://blog.csdn.net/lpp0900320123/article/details/26164857(参考:秒表实现)

    展开全文
  • Android 实现一个计时器

    千次阅读 2016-01-14 14:16:39
    最近,在做一个Android项目,需要用到一个计时器。特此,拿来和大家分享一下。 首先,看一下实现效果图。 实现思路主要利用Handler中的postDelayed (Runnable r, long delayMillis) 函数每隔1秒钟更新一次UI。具体...
  • 51单片机做一个计时器

    千次阅读 2020-04-03 18:44:19
    同样我们使用的仍然是STC的8051单片机,这段代码是用来做一个计时器,通过数码管实时显示出来,因为板子上数码管有6个,所以可以设置小时,分钟,秒三个单位,在Proteus上也是可以模拟的,计时结束可以用蜂鸣器,...
  • JavaScript编写了一个计时器

    千次阅读 2014-08-09 18:10:31
    初学JavaScript,用JavaScript编写了一个计时器设计思想: 1、借助于Date()对象,来不断获取时间点; 2、然后用两次时间点的毫秒数相减,算出时间差; 3、累加时间差,这样就能把计时精确。 ps: 没在网上看到有...
  • 利用MFC写一个计时器小程序

    千次阅读 2018-04-14 10:20:58
    利用MFC写一个计时器小程序
  • 【QT】设计一个秒表(跑步计时器

    千次阅读 2019-07-24 10:02:00
    设计目标 1. 定时器开始 2.复位从0开始计时 3.记录--把记录的时间添加到QTextBrowser, append(时间) 4. QTime t(0,0,0) t = t.addMsec( number ) t.toString (“hh:mm:ss:zzz”) 定时器(QTimer)的使用 ...
  • 完全模拟计时器实现(时间精确到 秒 即可) 功能要求: 1.计时器的开始功能 例如:键盘按键a 开始计时。 2.计时器的暂停功能 例如:键盘按键空格键 计时暂停 3.计时器的停止功能 例如:键盘按键s 计时停止 4....
  • 计时器设计

    2020-12-11 01:02:17
    利用前面关卡中设计的60进制计数器和24进制计数器,来联合设计一个24小时的计数器,要求具有同步置数、异步清零功能。
  • 用安卓的计时器设计一个3三颜色的背景切换的走马灯....................
  • windows程序设计计时器

    千次阅读 2013-11-19 21:10:29
    一、Windows计时器的作用: 1、显示时间,制作时钟。 2、多任务运行,当程序需要执行一个大任务时,可以把它分成一个个的小任务。每当收到一个WM_TIMER消息时,就处理一个小任务。 3、保持更新进度报告,显示某项...
  • 一个简单的网页计时器 作用 记录浏览该网页用的时间 实现 js源码 var hiddenProperty = 'hidden' in document ? 'hidden' : 'webkitHidden' in document ? 'webkitHidden' : 'mozHidden' in document ? '...
  • windows程序设计——计时器

    千次阅读 2017-06-14 17:32:03
    可能不是很直观,但计时器确实算的上一个输入设备。当设置了一个定时器是,系统设置一个计时数,由windows系统接收到硬件的tick信号将计时数减去一定值,当减少到0时,系统在程序的消息队列中加入一条WM_TIMER消息。...
  • TimingView 一个简易的旋转自定义计时器 GitHub传送
  • 【Android UI设计】之自定义计时器

    千次阅读 2015-03-26 19:40:59
    DigitalTimer简介 在样式上DigitalTimer支持自定义文字背景,大小,颜色的自定义。在功能上DigitalTimer支持启动计时计时暂停等功能。 运行效果图 XML Attributes Attrib
  • 最近要做这么一个东西,在一个activity中,实现多个计时器,点击哪个按钮,就开启哪个计时器。如下图: 涉及线程操作、更新ui。看着好简单,做起来还真花我不少功夫,主要是没理清这个思路,所以写代码的时候,...
  • TCP中的四个计时器

    千次阅读 2017-03-06 12:52:28
    TCP中的四个计时器包括重传计时器、坚持计时器、保活计时器、时间等待计时器 重传计时器(Retransmission Timer): 目的:为了控制丢失的报文段或者丢弃的报文段。这段时间为对报文段的等待确认时间。创建时间:在...
  • 【Vrilog HDL】课程设计-秒表计时器

    千次阅读 2018-07-10 19:05:06
    最近有EDA的课程设计,因为是初学者,能力有限,感觉自己做的还是有很大的改进空间,大家看到不要吐槽哦。环境:QuartusII 2017直接把自己的课程设计报告和工程文件给大家,可以直接用文本浏览器打开。(PS:有积分的...
  • 使用ue4蓝图设计计时器

    千次阅读 2020-04-23 15:20:38
    本片博客是运用ue4的蓝图制作能够显示在界面的简单的倒计时器,下面开始描述一下大体的制作过程。 1首先新建一个显示界面的蓝图,在蓝图框架内选择text 文本框,文本框显示的内容用一个绑定函数的确定。 绿色的框框...
  • import tkinter as tk from time import time print("hello world") class TimeCounter: ... root.title("计时器") root.geometry('800x600') self.display = tk.Label(root, text="00:00", wi...
  • 计时器汇编语言程序设计

    千次阅读 2011-03-30 15:58:00
    下载收藏分享加入文辑计时器汇编语言程序设计 微机原理计时器汇编语言程序设计设计设计一个简单的电子秒表(按一下钮启动,再按一个停止,再按一下清零,周而复始。)最小计时单位0.01S,即可显示XX.XX(秒、...
  • Windows程序设计计时器

    千次阅读 2008-10-10 20:11:00
    计时器基础知识1.计时器种输入设备,它周期性地通知应用程序:应用程序根据设定的时间间隔告诉Windows,然后Windows向应用程序周期性地发送WM_TIMER消息计时器消息:WM_TIMER2.操作计时器2.1设置计时器:...
  • 设计一个电路能完成时钟、秒表和计时器功能 二、课程设计的要求与数据 具体要求: 1、按下启动按钮,进入时钟运行模式;按下停止按钮,系统清零停止工作(全部显示内容也都熄灭); 2、系统包括时钟、秒表和计时器三...
  • 计时器与时钟的设计

    千次阅读 2016-03-19 23:39:22
    一、计时器  1.功能主要是包括开始和暂停(默认关闭窗口为退出)。 2.大致想法是程序运行,产生一个界面,主要信息是 开始 和 结束。  a.开始:  程序运行,自 00:00:00 开始,精确到秒。 b.暂停:  键盘输入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,626
精华内容 25,050
关键字:

怎么设计一个计时器