Win98 和 Win2K Timer 的使用 |
尚未結案
|
casper97
一般會員 發表:13 回覆:18 積分:11 註冊:2004-12-30 發送簡訊給我 |
小弟在計算每個 Timer 中斷所花費的時間,
但是在 98 和 2K 中竟然不同,
在 2K 下 Interval 設 20 還蠻準確,
但在98下 Interval 至少要設 54 以上才會比較接近,
這是為何? 要怎樣作才能在兩個系統下(98和2K)的 Timer 中斷能以相同的時間觸發呢? __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TOSVersionInfo VerInfo; VerInfo.dwOSVersionInfoSize=sizeof(VerInfo);
if(GetVersionEx(&VerInfo))
{
switch(VerInfo.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
Label1->Caption="Win32s";
break;
case VER_PLATFORM_WIN32_WINDOWS:
Label1->Caption="Windows 95/98";
break;
case VER_PLATFORM_WIN32_NT:
Label1->Caption="Windows NT";
break;
default: break;
}
Label2->Caption=IntToStr(VerInfo.dwMajorVersion);
Label3->Caption=IntToStr(VerInfo.dwMinorVersion);
Label4->Caption=IntToStr(VerInfo.dwBuildNumber);
if(VerInfo.szCSDVersion[0]!=' ')
Label5->Caption=VerInfo.szCSDVersion;
}
QueryPerformanceCounter(&liStartCounter);
QueryPerformanceFrequency(&liFrequency);
Label6->Caption="Timer Interval=1000"; }
//--------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
long int iSec;
QueryPerformanceCounter(&liEndCounter);
Label3->Caption=IntToStr(liEndCounter.QuadPart); dSec=(double)(liEndCounter.QuadPart-liStartCounter.QuadPart)/
(double)liFrequency.QuadPart;
szBuf.sprintf("%.10f",dSec);
Label4->Caption=szBuf; QueryPerformanceCounter(&liStartCounter);
Label1->Caption=IntToStr(liStartCounter.QuadPart); QueryPerformanceFrequency(&liFrequency);
Label2->Caption=IntToStr(liFrequency.QuadPart);
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button2Enter(TObject *Sender)
{
Form1->Timer1->Enabled=false;
Form1->Timer1->Interval=100;
Label6->Caption="Timer Interval=100";
Form1->Timer1->Enabled=true;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button3Enter(TObject *Sender)
{
Form1->Timer1->Enabled=false;
Form1->Timer1->Interval=20;
Label6->Caption="Timer Interval=20";
Form1->Timer1->Enabled=true;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Form1->Timer1->Enabled=false;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
Form1->Timer1->Enabled=true;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
Form1->Timer1->Enabled=false;
Form1->Timer1->Interval=1000;
Label6->Caption="Timer Interval=1000";
Form1->Timer1->Enabled=true;
}
|
daniel__lee
高階會員 發表:18 回覆:124 積分:113 註冊:2002-11-10 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
dear casper97: 可以試試看多媒體計時器(Multimedia Timer)
或小弟的拙作http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51703
|
casper97
一般會員 發表:13 回覆:18 積分:11 註冊:2004-12-30 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
dear casper97: 恩~真是奇怪的問題,我不記得有用到RTL.LIB。 使用上可以在宣告TMMTimer物件時先 #include "TMMTimerUnit.cpp" 在unit1.h中。或者,將TMMTimerUnit.cpp加入專案中(Ctrl+Alt+F11),在unit1.h中#include "TMMTimerUnit.hpp" 在Timer的觸發事件上,該函式一定要宣告為
void __fastcall 觸發事件的函式名稱(void);能在建立TMMTimer物件時將觸發函式設定為 MMTimer->OnTimer = 觸發事件的函式名稱;希望能解決你的問題囉~ |
casper97
一般會員 發表:13 回覆:18 積分:11 註冊:2004-12-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |