- 浏览: 4400290 次
- 性别:
- 来自: 湛江
博客专栏
-
SQLite源码剖析
浏览量:80073
-
WIN32汇编语言学习应用...
浏览量:70039
-
神奇的perl
浏览量:103345
-
lucene等搜索引擎解析...
浏览量:285778
-
深入lucene3.5源码...
浏览量:15007
-
VB.NET并行与分布式编...
浏览量:67553
-
silverlight 5...
浏览量:32147
-
算法下午茶系列
浏览量:45986
文章分类
最新评论
-
yoyo837:
counters15 写道目前只支持IE吗?插件的东西是跨浏览 ...
Silverlight 5 轻松开启绚丽的网页3D世界 -
shuiyunbing:
直接在前台导出方式:excel中的单元格样式怎么处理,比如某行 ...
Flex导出Excel -
di1984HIT:
写的很好~
lucene入门-索引网页 -
rjguanwen:
在win7 64位操作系统下,pygtk的Entry无法输入怎 ...
pygtk-entry -
ldl_xz:
http://www.9958.pw/post/php_exc ...
PHPExcel常用方法汇总(转载)
The QueryPerformanceFrequency function retrieves thefrequency of the high-resolution performance counter, if oneexists. The frequency cannot change while the system isrunning.
Syntax
BOOL QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency);
Parameters
lpFrequency [out] Pointer to a variable that receives thecurrent performance-counter frequency, in counts per second. If theinstalled hardware does not support a high-resolution performancecounter, this parameter can be zero.
Return Value
If the installed hardware supports a high-resolution performancecounter, the return value is nonzero.
If the function fails, the return value is zero. To get extendederror information, call GetLastError. Forexample, if the installed hardware does not support ahigh-resolution performance counter, the function fails.
Function Information
Minimum DLL Version kernel32.dll Header Declared in Winbase.h, includeWindows.h Import library Kernel32.lib Minimum operating systems Windows 95, WindowsNT 3.1 Unicode Implemented as Unicode version.
See Also
Timers Overview,QueryPerformanceCounter
QueryPerformanceCounter返回当前频率值。
二.代码例子
////////////////////////////////////////////////////////////////////
#include "CTimer.h"
//---------------------- default constructor------------------------------
//
//-------------------------------------------------------------------------
CTimer::CTimer(): m_FPS(0),
m_TimeElapsed(0.0f),
m_FrameTime(0),
m_LastTime(0),
m_PerfCountFreq(0)
{
//how many ticks per sec do we get
//返回系统每秒频率
QueryPerformanceFrequency( (LARGE_INTEGER*)&m_PerfCountFreq);
// m_TimeScale 为每频率占用的秒数
m_TimeScale = 1.0f/m_PerfCountFreq;
}
//---------------------- constructor-------------------------------------
//
// use to specify FPS
//
//-------------------------------------------------------------------------
CTimer::CTimer(float fps): m_FPS(fps),
m_TimeElapsed(0.0f),
m_LastTime(0),
m_PerfCountFreq(0)
{
//how many ticks per sec do we get
//返回系统每秒频率
QueryPerformanceFrequency( (LARGE_INTEGER*)&m_PerfCountFreq);
m_TimeScale = 1.0f/m_PerfCountFreq;
//calculate ticks per frame
//m_FPS为你希望系统每秒多少频率
//m_FrameTime为你设定的每频率相当于系统实际多少频率.可理解为每频率多少时间
m_FrameTime = (LONGLONG)(m_PerfCountFreq /m_FPS);
}
//------------------------Start()-----------------------------------------
//
// call this immediately prior to game loop.Starts the timer (obviously!)
//启动定时器
//--------------------------------------------------------------------------
void CTimer::Start()
{
//get the time
QueryPerformanceCounter( (LARGE_INTEGER*)&m_LastTime);
//update time to render next frame
//m_LastTime为定时开始前的时间
// m_NextTime为下次定时到了的时间.
m_NextTime = m_LastTime + m_FrameTime;
return;
}
//-------------------------ReadyForNextFrame()-------------------------------
//
// returns true if it is time to move on to thenext frame step. To be used if
// FPS is set.
//检测定时是否已经到了
//----------------------------------------------------------------------------
bool CTimer::ReadyForNextFrame()
{
if (!m_FPS)
{
MessageBox(NULL, "No FPS set in timer", "Doh!", 0);
returnfalse;
}
QueryPerformanceCounter( (LARGE_INTEGER*)&m_CurrentTime);
if (m_CurrentTime >m_NextTime)
{//定时到了
// m_TimeElapsed为本次定时用了多少秒
//更新定时开始前的时间 m_LastTime
m_TimeElapsed =(m_CurrentTime - m_LastTime) * m_TimeScale;
m_LastTime =m_CurrentTime;
//update time to render nextframe
m_NextTime = m_CurrentTime +m_FrameTime;
return true;
}
return false;
}
//--------------------------- TimeElapsed--------------------------------
//
// returns time elapsed since last call to thisfunction. Use in main
// when calculations are to be based on dt.
//
//-------------------------------------------------------------------------
double CTimer::TimeElapsed()
{
//得到本次定时已经用了多少秒
QueryPerformanceCounter( (LARGE_INTEGER*)&m_CurrentTime);
m_TimeElapsed = (m_CurrentTime -m_LastTime) * m_TimeScale;
m_LastTime =m_CurrentTime;
return m_TimeElapsed;
}
========================================================================================
/////////////////////////////////////
///////////////////////////////////////
///////////////////////////////////////
#ifndef CTIMER_H
#define CTIMER_H
//-----------------------------------------------------------------------
//
// Name: CTimer.h
//
// Author: Mat Buckland 2002
//
// Desc: Windows timer class for the book GameAI
// Programming with Neural Nets and GeneticAlgorithms.
//
//-----------------------------------------------------------------------
#include
class CTimer
{
private:
LONGLONG m_CurrentTime,
m_LastTime,
m_NextTime,
m_FrameTime,
m_PerfCountFreq;
double m_TimeElapsed,
m_TimeScale;
float m_FPS;
public:
//ctors
CTimer();
CTimer(float fps);
//whatdayaknow, this starts the timer
void Start();
//determines if enough time has passed to moveonto next frame
bool ReadyForNextFrame();
//only use this after a call to theabove.
double GetTimeElapsed(){returnm_TimeElapsed;}
double TimeElapsed();
};
#endif
三.使用举例
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR szCmdLine,
int iCmdShow)
{
//handle to our window
HWND hWnd;
//our window classstructure
WNDCLASSEX winclass;
// first fill in the window class stucture
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc =WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hInstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = NULL;
winclass.lpszMenuName = NULL;
winclass.lpszClassName = g_szWindowClassName;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
//register the windowclass
if(!RegisterClassEx(&winclass))
{
MessageBox(NULL,"Registration Failed!", "Error", 0);
//exit theapplication
return0;
}
//create the window andassign its ID tohwnd
hWnd = CreateWindowEx(NULL, // extended style
g_szWindowClassName, // window class name
g_szApplicationName, // window caption
WS_OVERLAPPEDWINDOW, // window style
0, // initial x position
0, // initial y position
WINDOW_WIDTH, // initial x size
WINDOW_HEIGHT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL); // creation parameters
//make sure the window creation has gone OK
if(!hWnd)
{
MessageBox(NULL, "CreateWindowEx Failed!", "Error!", 0);
}
//make the window visible
ShowWindow (hWnd,iCmdShow);
UpdateWindow (hWnd);
// Enterthe message loop
bool bDone =false;
//create a timer
CTimertimer(FRAMES_PER_SECOND);
//start the timer
timer.Start();
MSG msg;
while(!bDone)
{
while(PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
if( msg.message == WM_QUIT )
{
// Stop loop if it's a quit message
bDone = true;
}
else
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
if(timer.ReadyForNextFrame())
{
//**any gameupdate code goes in here**
//this will call WM_PAINT which will render our scene
InvalidateRect(hWnd,NULL, TRUE);
UpdateWindow(hWnd);
}
}//endwhile
UnregisterClass( g_szWindowClassName, winclass.hInstance );
return msg.wParam;
}
发表评论
-
win下开发跨平台GUI程序的另类选择
2011-05-03 17:21 2217GTK+ ● GTK+的网站:www.gtk. ... -
win32汇编-送消息给其它应用程序
2010-02-20 16:42 29162个函数invoke postmessage,hwnd,msg ... -
WIN32汇编之菜单、加速键、快捷键
2010-02-20 16:38 3158(一)Invoke checkmenuitem,h ... -
WIN32汇编学习应用之defwindowproc
2010-02-20 16:36 2725defwindowproc窗口过程对一些消息的默认处理方式WM ... -
windows中WM_CLOSE消息和WM_DESTORY消息的不同之处
2010-02-20 16:33 24371、WM_CLOSE仅代表用户发出了关闭的指令,但窗口过程可以 ... -
WIN32汇编获取应用程序句柄
2010-02-20 16:32 2200getmodulehandle使用方法invoke getm ... -
WIN32汇编语言学习应用之消息获取
2010-02-20 16:31 1732MSG结构:MSG STURCTHwnd DWORD ?Mes ... -
一个WIN32汇编的完整窗口入门程序的理解与注释
2010-02-20 16:28 3738;WIN32汇编的注释是;,其实WIN32汇编和VC有很多 ... -
汇编中通用寄存器的目的
2010-02-20 16:24 21931、EAX和AX:累加器,所有的I/O指令用它来与外部设备 ... -
汇编几个段
2010-02-17 16:39 4223反汇编后几个段的含义 预定义段 一个WindowsNT ... -
WIN32汇编语言解析
2010-02-17 16:36 2571win32汇编中的sizeof win32汇编中的s ... -
设置与获取窗口标题文本
2010-02-17 16:32 2018获得: CString xx=""; ... -
win32汇编快速入门
2010-02-17 16:31 4673汇编可以开发WINDOWS程序 ... -
WIN32汇编-HELLO,WORLD!
2010-02-17 16:29 4444我们用WIN32汇编构建 ... -
保护模式下段寄存器的作用
2010-02-17 14:39 32651、保护模式一,虽然在寻址上没有分段的限制问题,但对要对一个地 ... -
WIN32汇编-反汇编
2010-02-17 14:33 2802学好WIN32汇编,平时需 ... -
玩转菜单-菜单资源
2010-02-08 17:31 1946菜单资源 WINDOWS程序的菜单通常编译前定义在资 ... -
二进制资源和自定义资源使用定义
2010-02-08 17:29 22001、二进制资源 (1)定义格式: 资源IDRCDA ... -
LISTBOX和LIST CONTROL的项目增加方法
2010-02-08 17:28 54641、LIST CONTROL(report方式): (1)类 ... -
取IP寄存器的当前值
2010-02-08 17:27 1950call $+3 POP CX 把IP寄存器的当前值放 ...
相关推荐
总结,"VC精确定时程序"涉及了Windows API定时器、高精度计时器、多线程异步编程等多个方面,通过深入学习和实践,开发者能够掌握更精确控制程序运行时间的技巧,从而提升软件的性能和用户体验。对于...
在VC++ 6.0开发环境中,实现基于Windows的精确定时是一项常见的需求,尤其是在进行实时系统编程或者游戏开发时。本项目通过提供详细的说明和源代码,旨在帮助开发者掌握如何在Windows平台上实现高精度的时间控制。 ...
在Microsoft Visual C++ (VC) 开发环境中,创建基于Windows的精确定时程序是一项常见的任务。Windows操作系统提供了多种定时机制,这些机制可以帮助开发者实现不同精度和应用场景的定时需求。本篇将详细介绍如何在VC...
本资源提供了一个关于精确定时程序的实践案例,通过VS工程的形式,包括了三种不同的定时方法。让我们详细探讨一下这些方法及其背后的原理。 首先,"设定值精确定时"小程序可能是通过直接操作硬件计时器来实现的。在...
在VC++编程环境中,开发基于Windows的精确定时程序是一项重要的任务,这通常涉及到系统级的时间管理和多线程同步。本文将深入探讨如何在VC++中实现这样的功能,并结合"VC中基于 Windows 的精确定时hur.cn或vip.hur....
本文将详细介绍一种在Visual C++(简称VC)环境下实现Windows精确定时的方法,并通过七个具体的实例进行说明。 #### 定时方法详解 ##### 方式一:WM_TIMER 消息映射 - **原理**:通过`SetTimer()`函数设置定时器,...
### 论文《基于Windows 系统环境下的精确定时过程实现》知识点解析 #### 一、引言 本文档是一篇学术论文摘要,题目为《基于Windows 系统环境下的精确定时过程实现》。该论文由吴益明、卢京潮、魏莉莉、闫建国等人...
综上所述,对于基于80x86 CPU和Windows平台的实时测控系统,实现精确定时可以通过利用多媒体定时器、内核定时器或直接操作硬件中断等技术。具体选择哪种方法,需要根据实际应用场景、系统资源和开发能力来决定。同时...
这个"多媒体精确定时时钟源码"很可能是通过Windows API实现了以上的一种或多种技术,以提供在MFC应用中实现精确到毫秒级别的时间控制。学习和理解这个源码,可以帮助开发者深入理解实时系统和多媒体应用的底层工作...
基于Windows 的高精度实时定时程序,精度可达到微秒级,可以用来发送串口数据等
"精确定时,精度到us"的标题表明我们关注的是一个能够实现微秒级别精度的定时技术。描述中提到的问题是,使用标准的`Sleep()`函数在Windows环境中进行延迟时,当时间间隔小于100毫秒,其精度往往无法满足需求。`...
在VC++编程环境中,开发Windows应用程序时,常常需要实现精确的延时功能,这在处理时间敏感的任务或者进行性能测试时尤为重要。本文将详细探讨如何在VC++中利用Windows API来实现这种精确延时。 首先,Windows API ...
在Visual Basic (VB) 开发环境中,实现精确定时是一项常见的需求,特别是在需要精确控制时间间隔的应用场景中。本篇文章将详细解析如何通过调用`GetTickCount`函数实现精确的定时功能,并对相关代码片段进行深入分析...
总的来说,理解多线程、启动控制台和精确定时的概念,并掌握`WaitForSingleObject`的使用,对于编写高效、可靠的并发程序至关重要。在实际开发中,这些技术广泛应用于服务器程序、实时系统、游戏引擎等多个领域。...
总结来说,"定时关机---自制小程序"是利用BCB开发的一个实用工具,它通过调用Windows API实现了定时关机功能,且具有低资源占用和托盘最小化特性,为用户提供了便捷的电脑自动化管理方式。对于那些需要定时关机的...
总结来说,"Windows高精度定时器(VC++实现)"是利用Windows消息机制和高级计时API实现的,主要目标是提供毫秒级精度的定时服务,便于开发者在需要精确控制时间的场景下进行编程。`MessageTimer`类可能是这一实现的...
【Win定时器】这个标签可能是指程序利用了Windows操作系统提供的定时服务,例如SetTimer API,来实现精确的定时功能。Windows定时器能够在后台运行,即使用户已经离开了桌面,也能按照预定计划执行任务。 至于...
可以使用 timeGetTime() 函数或 timeSetEvent() 函数来实现精确定时。 timeGetTime() 函数 timeGetTime() 函数可以返回从 Windows 启动开始所经过的时间,该函数定时精度为 ms 级。 timeSetEvent() 函数 ...
这个程序允许用户设置定时任务,以精确到秒的精度自动启动或关闭指定的应用程序。要实现这样的功能,我们需要理解C#的基础知识,WinForm的UI设计,以及如何处理定时任务。 首先,`C#`是微软公司推出的一种面向对象...