今天收获不少,一口气解决了实时仿真中时钟中断和CPU执行效率的问题。当然这一切要归功于多媒体定时器的应用。其实网上有不少关于多媒体定时器应用的文章和例子,只不过这些程序一方面都是用C++编的,另一方面没有一个能完全正确运行的。没办法,只好自己编。经过一番周折,总算得一个能正常运行的例子。下面就是这个例子的C代码:
#include <stdio.h>
#include <windows.h>
#include <windows.h>
#pragma comment(lib,"winmm.lib") //安装多媒体定时器支持库,也可手动将winmm.lib添加到工程中。
#define TIMER_ACCURACY 1000 //定时器分辨率
#define N 5
#define N 5
void CALLBACK fun(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2)
{
printf("The timer event callback!\n");
printf("Current time:%lu\n",GetTickCount());
}
{
}
void main()
{
UINT wTimerRes=TIMER_ACCURACY; //定义时间间隔
UINT wAccuracy; //定义分辨率
UINT TimerID; //定义定时器句柄
{
}
执行结果:
The timer event callback!
Current time:1091421
The timer event callback!
Current time:1092421
The timer event callback!
Current time:1093421
The timer event callback!
Current time:1094421
The timer event callback!
Current time:1095421
Press any key to continue
The timer event callback!
Current time:1091421
The timer event callback!
Current time:1092421
The timer event callback!
Current time:1093421
The timer event callback!
Current time:1094421
The timer event callback!
Current time:1095421
Press any key to continue
从上面的结果可以看出,回调函数的执行间隔不多不少恰好为1000ms等于定时器当前分辨率。
在应用多媒体定时器的时候应注意几个问题:
1、多媒体定时器库文件
如果没有将多媒体定时器的支持库文件(winmm.lib)添加到工程中,链接时将会出错.
2、mmsystem.h
在编译控制台程序的时候,包含这个头文件将会发生编译错误,错误显示为mmsystem.h的语法错误。mmsystem.h应该没有什么问题,问题出在它可能不能用在这类应用程序中。如果用windows.h代替就可解决问题。
3、InitializeTimer()
网上有个例子用到这个函数来初始化定时器,在window95+vc5.0下做的,我在winXP+vc6.0下做是通不过编译的,原因是无法识别的外部函数。我在MSDN中也找不到这个函数的声明。不用这个函数,程序也能正常运行。
1、多媒体定时器库文件
如果没有将多媒体定时器的支持库文件(winmm.lib)添加到工程中,链接时将会出错.
2、mmsystem.h
在编译控制台程序的时候,包含这个头文件将会发生编译错误,错误显示为mmsystem.h的语法错误。mmsystem.h应该没有什么问题,问题出在它可能不能用在这类应用程序中。如果用windows.h代替就可解决问题。
3、InitializeTimer()
网上有个例子用到这个函数来初始化定时器,在window95+vc5.0下做的,我在winXP+vc6.0下做是通不过编译的,原因是无法识别的外部函数。我在MSDN中也找不到这个函数的声明。不用这个函数,程序也能正常运行。
本文介绍了一个使用多媒体定时器实现精确计时的C语言程序示例。通过设置定时器分辨率和回调函数,程序实现了每1000毫秒触发一次事件,并记录了当前时间戳,验证了定时器的有效性和准确性。
6649

被折叠的 条评论
为什么被折叠?



