哪位大虾用过多媒体定时器 有没有应用例子,可否共享呀。这东东可实现毫秒级? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LARGE_INTEGER freq,time1,time2; if(!QueryPerformanceFrequency(&freq)) { AfxMessageBox("QueryPerformanceFrequency() error"); } QueryPerformanceCounter(&time1); // bit.DeDirty(dlg.m_InputData,pMFrm);//dosomething QueryPerformanceCounter(&time2); CString strTmp; strTmp.Format("%f",(double)(time2.QuadPart-time1.QuadPart)/double)freq.QuadPart); AfxMessageBox(strTmp); 使用这三个函数所得到的时间精度于操作系统有关 这 段 程 序 的 主 要 功 能 是: 设 置 两 个 时 钟 定 时 器, 一 个 间 隔 是1 毫 秒, 一 个 间 隔 是2 秒, 每 执 行 一 次, 输 出 当 前 系 统 时 钟 值 到 文 件“cure.out”, 以 比 较 此 定 时 器 的 精 确 度。( 此 程 序 在 中 文windows95 及Microsoft VC5.0 编 译 通 过。 只 节 取 与 定 时 器 有 关 的 部 分 程 序。) #include < stdio.h > //包含所用系统函数的头文件, 如果编译有问题,可调整此语句的位置 #include < mmsystem.h > //定义1毫秒和2秒时钟间隔,以毫秒为单位 #define ONE_MILLI_SECOND1 #define TWO_SECOND 2000 //定义时钟分辨率,以毫秒为单位 #define TIMER_ACCURACY1 UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔 UINT wAccuracy;//定义分辨率 UINT TimerID_1ms,TimerID_2s;//定义定时器句柄 CCureApp::CCureApp() ∶ fout("cure.out", ios::out)//打开输出文件“cure.out” { // TODO: add construction code here, // Place all significant initialization in InitInstance //给时间间隔变量赋值 wTimerRes_1ms = ONE_MILLI_SECOND ; wTimerRes_2s = TWO_SECOND; TIMECAPS tc; //通过函数timeGetDevCaps取出系统 的分辨率取值范围(对intel系统, 1~16毫秒),//如果无错则继续 if(timeGetDevCaps(&tc, sizeof(TIMECAPS)) == TIMERR_NOERROR) { //分辨率的值不能超出系统的取值范围 wAccuracy = min(max(tc.wPeriodMin, TIMER_ACCURACY),tc.wPeriodMax); //调用timeBeginPeriod函数设置定时器 的分辨率,类似于for循环的步长 timeBeginPeriod(wAccuracy); //设置定时器 InitializeTimer(); } } CCureApp::~CCureApp() { //结束时钟 fout < < "结束时钟" < < endl; //删除两个定时器 timeKillEvent(TimerID_1ms); timeKillEvent(TimerID_2s); //删除设置的分辨率 timeEndPeriod(wAccuracy); } 注:使用完的定时器及分辨率一定 要删除,否则系统会越来越慢。 void CCureApp::InitializeTimer() { StartOneMilliSecondTimer(); StartTwoSecondTimer(); } //一毫秒定时器的回调函数, 类似于中断处理程序 voidPASCAL//一定要声明为全局PASCAL函数, 否则编译会有问题 OneMilliSecondProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2) { static int ms = 0;//定义计数器 CCureApp *app = (CCureApp *)dwUser; //取得系统时间以毫秒为单位 DWORD osBinaryTime = GetTickCount(); //输出计数器值和当前系统时间到文件 app- >fout < < ++ms < < ": 1ms : " < < osBinaryTime < < endl; } //加装1毫秒定时器 void CCureApp::StartOneMilliSecondTimer() { if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy, (LPTIMECALLBACK) OneMilliSecondProc,//回调函数 (DWORD)this,//用户自传送到回调函数的数据 /*周期调用,只使用一次用TIME_ONESHOT*/ TIME_PERIODIC)) == 0) { AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK); } else//不等于0表明加装成功, 返回此定时器的句柄 fout < < "16ms计时:" < < endl; } 以下为2秒定时器的回调函 数和加装函数,与1毫秒的类似; void PASCAL TwoSecondProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2) { static int s = 0; CCureApp *app = (CCureApp *)dwUser; DWORD osBinaryTime = GetTickCount(); app- >fout < < "*********************** ***********************" < < endl; app- >fout < < ++s < < ": 2s : " < < osBinaryTime < < endl; } void CCureApp::StartTwoSecondTimer() { if((TimerID_2s = timeSetEvent(wTimerRes_2s, wAccuracy, (LPTIMECALLBACK) TwoSecondProc, (DWORD)this, TIME_PERIODIC)) == 0) { AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK); } else fout < < "2s计时:" < < endl; } 传说中的CV程序员决定开始正式学c++.. 急,急!!怎样读取FTP上的.txt文件写入ACCESS数据库 visual stdio 6.0 sp3是什么意思 CFileFind的小问题 有数据库支持的程序的发行 上个问题已经结贴,各位再帮帮忙,帮我解决一个关于时间显示的问题! 急用:怎么给图形编辑器添加com组件 ※※※如果当前程序正在使用的文件被其他程序修改,怎么得到文件修改通知????? 谁用API写过Socket通讯的程序,高分求购一个示范代码?分不够可以再加。 关于设计一个生成SQL语句的辅助类,谁以前做过? 在asp调用vc的dll问题 今天的google在哪里?
{
AfxMessageBox("QueryPerformanceFrequency() error");
} QueryPerformanceCounter(&time1);
// bit.DeDirty(dlg.m_InputData,pMFrm);//dosomething QueryPerformanceCounter(&time2);
CString strTmp;
strTmp.Format("%f",(double)(time2.QuadPart-time1.QuadPart)/double)freq.QuadPart); AfxMessageBox(strTmp); 使用这三个函数所得到的时间精度于操作系统有关
#include < stdio.h >
//包含所用系统函数的头文件,
如果编译有问题,可调整此语句的位置
#include < mmsystem.h >
//定义1毫秒和2秒时钟间隔,以毫秒为单位
#define ONE_MILLI_SECOND1
#define TWO_SECOND 2000
//定义时钟分辨率,以毫秒为单位
#define TIMER_ACCURACY1
UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔
UINT wAccuracy;//定义分辨率
UINT TimerID_1ms,TimerID_2s;//定义定时器句柄
CCureApp::CCureApp()
∶ fout("cure.out", ios::out)//打开输出文件“cure.out”
{
// TODO: add construction code here,
// Place all significant
initialization in InitInstance
//给时间间隔变量赋值
wTimerRes_1ms = ONE_MILLI_SECOND ;
wTimerRes_2s = TWO_SECOND;
TIMECAPS tc;
//通过函数timeGetDevCaps取出系统
的分辨率取值范围(对intel系统,
1~16毫秒),//如果无错则继续
if(timeGetDevCaps(&tc, sizeof(TIMECAPS))
== TIMERR_NOERROR)
{
//分辨率的值不能超出系统的取值范围
wAccuracy = min(max(tc.wPeriodMin,
TIMER_ACCURACY),tc.wPeriodMax);
//调用timeBeginPeriod函数设置定时器
的分辨率,类似于for循环的步长
timeBeginPeriod(wAccuracy);
//设置定时器
InitializeTimer();
}
}
CCureApp::~CCureApp()
{
//结束时钟
fout < < "结束时钟" < < endl;
//删除两个定时器
timeKillEvent(TimerID_1ms);
timeKillEvent(TimerID_2s);
//删除设置的分辨率
timeEndPeriod(wAccuracy);
}
注:使用完的定时器及分辨率一定
要删除,否则系统会越来越慢。
void CCureApp::InitializeTimer()
{
StartOneMilliSecondTimer();
StartTwoSecondTimer();
}
//一毫秒定时器的回调函数,
类似于中断处理程序
voidPASCAL//一定要声明为全局PASCAL函数,
否则编译会有问题
OneMilliSecondProc(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
static int ms = 0;//定义计数器
CCureApp *app = (CCureApp *)dwUser;
//取得系统时间以毫秒为单位
DWORD osBinaryTime = GetTickCount();
//输出计数器值和当前系统时间到文件
app- >fout < < ++ms < < ": 1ms : "
< < osBinaryTime < < endl;
}
//加装1毫秒定时器
void CCureApp::StartOneMilliSecondTimer()
{
if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
(LPTIMECALLBACK) OneMilliSecondProc,//回调函数
(DWORD)this,//用户自传送到回调函数的数据
/*周期调用,只使用一次用TIME_ONESHOT*/
TIME_PERIODIC)) == 0)
{
AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK);
}
else//不等于0表明加装成功,
返回此定时器的句柄
fout < < "16ms计时:" < < endl;
}
以下为2秒定时器的回调函
数和加装函数,与1毫秒的类似;
void PASCAL
TwoSecondProc(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
static int s = 0;
CCureApp *app = (CCureApp *)dwUser;
DWORD osBinaryTime = GetTickCount();
app- >fout < < "***********************
***********************" < < endl;
app- >fout < < ++s < < ": 2s : "
< < osBinaryTime < < endl;
}
void CCureApp::StartTwoSecondTimer()
{
if((TimerID_2s = timeSetEvent(wTimerRes_2s, wAccuracy,
(LPTIMECALLBACK) TwoSecondProc,
(DWORD)this,
TIME_PERIODIC)) == 0)
{
AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK);
}
else
fout < < "2s计时:" < < endl;
}