WinAPI: SetTimer、KillTimer – 建立與移除高效能定時器

來源:互聯網
上載者:User
//建立定時器函數的聲明:SetTimer(  hWnd: HWND;               {與定時器相關聯的視窗控制代碼}  nIDEvent: UINT;           {指定一個非 0 的定時器標識符}  uElapse: UINT;            {指定間隔時間, 單位是毫秒}  lpTimerFunc: TFNTimerProc {每到時間後, 要調用的函數的指標}): UINT;                    {返回定時器標識符; 失敗返回 0}//移除定時器函數的聲明:KillTimer(  hWnd: HWND;    {與定時器相關聯的視窗控制代碼}  uIDEvent: UINT {定時器標識符}): BOOL;//處理 WM_TIMER 訊息的回呼函數的格式:TimerProc(  hWnd: HWND;    {與定時器相關聯的視窗控制代碼}  uMsg: UINT;    {WM_TIMER 訊息}  idEvent: UINT; {定時器的標識符}  Time: DWORD    {以世界時間公約格式(UTC)指定的系統時間});               {這是個過程, 無傳回值}

應該先理解一下再舉例:

SetTimer 的參數1: hWnd, 一般指定 Self.Handle 就可以了;

SetTimer 的參數2: nIDEvent 是某個定時器的標識符, 說明可以建立若干個定時器, 隨便給個正整數即可;

SetTimer 的參數3: uElapse, 這相當於 VCL 中 Timer 類的 Interval 屬性;

看來參數 1-3 還是非常簡單, 不好理解的就是參數4: lpTimerFunc, 這是一個過程的地址.

任意一個過程的地址嗎? 當然不是; 這個過程的參數結構是 Windows 系統規定的, 我們必須按規定去定義這個過程; 即使你用不到其中的參數也必須如此.

//舉例:var  i: Integer;//先定義回呼函數procedure MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);begin  Form1.Text := IntToStr(i);  Inc(i);end;//建立定時器procedure TForm1.Button1Click(Sender: TObject);begin  SetTimer(Handle, 1, 10, @MyTimerProc); {每 1/100 秒調用一次 MyTimerProc}end;//刪除定時器procedure TForm1.Button2Click(Sender: TObject);begin  KillTimer(Handle, 1); {建立時指定的定時器標識是 1, 這裡必須要一致}end;//如果回調過程是表單類的一個方法, 需要這樣:var  i: Integer;//先定義回呼函數procedure TForm1.MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);begin  Text := IntToStr(i);  Inc(i);end;//建立定時器procedure TForm1.Button1Click(Sender: TObject);begin  SetTimer(Handle, 1, 10, @TForm1.MyTimerProc); {每 1/100 秒調用一次 MyTimerProc}end;//刪除定時器procedure TForm1.Button2Click(Sender: TObject);begin  KillTimer(Handle, 1); {建立時指定的定時器標識是 1, 這裡必須要一致}end;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.