【SDL】SDL学习笔记二 定时器
定时器相关API(SDL_timer.h):
1. Uint32 SDL_GetTicks(): 获取从SDL库初始化(定时器模块初始化)开始到当前的运行时间(ms);
2. Uint64 SDL_GetPerformanceCounter(): 获取高精度定时器的当前值;
3. Uint64 SDL_GetPerformanceFrequency(): 获取高进度定时器频率(每秒钟高精度定时器的次数);
4. void SDL_Delay(Uint32 ms): 延迟函数;
5. SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *param):
向系统请求增加一个定时器.
SDL_TimerID: 定时器的ID,若该值为NULL,表示请求失败;
interval: 定时间隔;
callback: 回调函数,定时时间到后会调用此函数;
备注: typedef Uint32 (* SDL_TimerCallback)(Uint32 interval, void *param):
该函数返回值为下次唤醒的时长,若返回0,则不会再唤醒.
6. SDL_bool SDL_RemoveTimer(SDL_TimerID id): 删除给定id的定时器,返回值表示是否删除成功.
7.int SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback);此函数也是启动定时器和删除定时器的版本,但是已经被上面两个API替代。
参考程序示例一:
#include <stdio.h>
#include <SDL/SDL.h>int i = 0;//回调函数
Uint32 my_fun(Uint32 interval, void *param)
{printf("interval: %d *param: %d\n", interval, *(int*)param);i++;return interval;
}int main(void)
{int ret;Uint32 time;//定时器IDSDL_TimerID timeId = NULL;//SDL初始化ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);if (-1 == ret){printf("SDL_Init failed..\n"); goto err0;}//延时函数 单位是毫秒//SDL_Delay(1000);//返回从SDL初始化开始到现在的时间 单位是毫秒time = SDL_GetTicks();printf("%u\n", time);//添加定时器timeId = SDL_AddTimer(100, my_fun, &time);if (NULL == timeId){printf("AddTime failed...\n"); goto err0;}while(1){if (10 == i)break;}//删除定时器SDL_RemoveTimer(timeId);//关闭SDLSDL_Quit();return 0;
err0:return -1;
}
运行结果如下:
原来版本定时器示例二:
#include <stdio.h>
#include <SDL/SDL.h>int i = 0;//定时器的第二种方法 此API已经被SDL_AddTimer SDL_RemoveTimer取代
Uint32 fun(Uint32 interval)
{printf("interval: %d\n", interval);i++; return interval;
}int main(void)
{int ret;Uint32 time;//定时器IDSDL_TimerID timeId = NULL;//SDL初始化ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);if (-1 == ret){printf("SDL_Init failed..\n"); goto err0;}//延时函数 单位是毫秒//SDL_Delay(1000);//返回从SDL初始化开始到现在的时间 单位是毫秒time = SDL_GetTicks();printf("%u\n", time);SDL_SetTimer(100, fun);while(1){if (10 == i)break;}//删除定时器SDL_SetTimer(0, NULL);//关闭SDLSDL_Quit();return 0;
err0:return -1;
}
程序运行结果如下:
【SDL】SDL学习笔记二 定时器相关推荐
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- [转载]dorado学习笔记(二)
原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...
- PyTorch学习笔记(二)——回归
PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...
- tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数
tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报 分类: tensorflow(4) 目录(?)[+] 本笔记目的 ...
- Scapy学习笔记二
Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...
- Ethernet/IP 学习笔记二
Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...
- Java学习笔记二:数据类型
Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...
- 吴恩达《机器学习》学习笔记二——单变量线性回归
吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...
- ASP.NET MVC 2 学习笔记二: 表单的灵活提交
ASP.NET MVC 2 学习笔记二: 表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...
最新文章
- oracle virtualbox 添加共享硬盘
- python3 判断数据类型
- SQL表内查重和删重
- day15-ajax和jquery
- 苹果MAC系统的安装
- 不断电系统的容量如何计算?
- Request的学习笔记(属Servlet学习课程)
- 初见 IsolatedStorage
- BZOJ 3729: Gty的游戏 [伪ETT 博弈论]【学习笔记】
- c语言 抽奖算法,腾讯2018校招笔试!抽奖算法思路c++实现!进入鹅厂真的简单!...
- [Silverlight 4 RC]WebBrowserBrush概览
- 微信语音遥控Windows Azure云虚拟机
- 千峰前端html个人笔记
- 在线开票服务器设置,开票服务器系统介绍
- 机器学习系列2---经验风险最小化原则和结构风险最小化原则与VC维问题
- 《汉魏风云》2、孙吴兵法第一传人——辛苦的天才曹操
- jQuery-获取验证码
- ST7703 LCM显示屏调试--基于MT6765
- 荷马史诗【k叉哈夫曼树】
- 系统安全启动总结思考
热门文章
- DataKeyNames
- css什么是自适应布局,CSS自适应布局
- java 删除二进制内容_二进制搜索树节点删除
- 如何在服务器上运行python程序_在服务器上配置运行(每天一则段子python程序)...
- oracle 02380,oracle 11.2.0.3 fornb…
- Java黑皮书课后题第5章:**5.37(十进制转二进制)编写程序,提示用户输入一个十进制整数,然后显示对应的二进制值(不要使用Integer.toBinaryString(int)方法)
- mysql 远程连接
- linux安装报错之:ifconfig command not found解决
- js去掉字符串中的所有空格
- squirrelsql安装