当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 在windows中的很多场合下编程(例如工业控制、游戏)中需要比较精确的记时器,本文讨论的是在delphi下实现记时器的若干方法以及它们的精度控制问题。
 

 

    摘要:为什么我的c盘每次启动后都是完全共享?看看以下这个程序就明白了,噢,索叻是叻:) 此程序当网络上其他用户执行后,会自己复制一份到该用户windows的system目录下,,并修改该机的注册表,使该机的c盘自动改为完全共享,且每次启动机子后都会重新修改注册表,当然,为了不让别人看出执行的程序,该程序执行时不会在任务栏显示,本身也不回显,执行一秒钟后程序自动退出,不易被发觉。 来看源程序吧,该程序在......
 ·delphi中巧妙利用res文件    »显示摘要«
    摘要:作者: 苏涌 在delphi项目中,通常有一个与项目名称主文件名相同的.res文件,该文件用于保存应用程序图标等资源,对应于此文件,在项目文件中一定含有编译指示“{$r *.res}”,告诉编译器编译时需要包含与项目主文件名相同的.res文件。同样,如果需要在应用程序中以资源形式包含任何文件类型,也可以利用.res文件。本文将告诉你如何利用res文件在delphi程序内部包含文件。 一创建.r......


利用delphi建立精确计数器
在windows中的很多场合下编程(例如工业控制.游戏)中需要比较精确的记时器,本文讨论的是在delphi下实现记时器的若干方法以及它们的精度控制问题.

【程序编程相关:判断MS SQL Server是否启动

【推荐阅读:检测系统是否已安装ADO驱动程序

在delphi中最常用的是timer控件,它的设置与使用都非常方便,理论上它的记时精度可以达到1ms(毫秒).但是众所周知的,实际上timer在记时间隔小于50ms之下是精度是十分差的.它只适用于对于精度要求不太高的场合. 【扩展信息:在Delphi中实现对目录拷贝、删除和搬

       这里作者要介绍的是两种利用windows api函数实现精确记时的方法.第一中方法是利用高性能频率记数(作者本人的称呼)法.利用这种方法要使用两个api函数queryperformancefrequency与queryperformancecounter.queryperformancefrequency函数获得高性能频率记数器的震荡频率.

调用该函数后,函数会将系统频率记数器的震荡频率(每毫秒)保存到一个largeinteger中.不过利用该函数在几台机器上做过试验,结果都是1193180.读者朋友可以在自己的机器上试一下

queryperformancecounter函数获得系统频率记数器的震荡次数,结果也保存到一个largenteger中.  

很显然,如果在计时中首先使用queryperformancefrequency获得高性能频率记数器每毫秒的震荡次数,然后在计时开始时使用queryperformancecounter函数获得当前系统频率记数器的震荡次数.在计时结束时再调用queryperformancecounter函数获得系统频率记数器的震荡次数.将两者相减,再将结果除以频率记数器每毫秒的震荡次数,就可以获得某一事件经过的准确时间.(次数除以频率等于时间)

另外的一种精确记时器的功能是利用多媒体记时器函数(这也是作者的定义,因为这个系列的函数是在winmm.dll中定义并且是为媒体播放服务的).

实现多媒体记时器首先要使用timesetevent函数建立计时事件.该函数在delphi中的mmsystem.pas中有定义,定义如下:

function timesetevent(udelay, uresolution: uint;

  lpfunction: tfntimecallback; dwuser: dword; uflags: uint): mmresult; stdcall

函数定义中参数udelay定义延迟时间,以毫秒为单位,该参数相当于timer控件的interval属性.参数uresolution定义记时精度,如果要求尽可能高的精度,要将该参数设置为0;参数lpfunction定义了timesetevent函数的回调函数.该函数相当于一个定时中断处理函数,每当经过一个udelay长度的时间间隔,该函数就会被调用,编程者可以在该函数中加入相应的处理语句.参数dwuser定义用户自定义的回调值,该值将传递给回调函数.参数uflags定义定时类型,如果要不间断的记时,该值应设置为1.


...   下一页
    摘要:如何在程序中动态取得win95/98的网络邻居中的工作组及计算机名? 可参考下面代码,或许有所帮助: procedure getdomainlist(tv:ttreeview); var a : integer; errcode : integer; netres : array[0..1023] of tnetresource; enumhandle : thandle; enu......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE