線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1434
推到 Plurk!
推到 Facebook!

利用Timer實作Busying Waiting的問題

答題得分者是:taishyang
acmaeiou
一般會員


發表:4
回覆:9
積分:2
註冊:2010-06-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-08-17 11:17:37 IP:60.248.xxx.xxx 訂閱
各位先進們好,小弟在想用BCB的Timer來實作Busy Waiting的功能,原始碼如下

[code cpp]
#ifndef Unit1H
#define Unit1H
#include
#include
#include
#include <Forms.hpp><br />#include
class TForm1 : public TForm
{
__published:
TTimer *Timer1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
private:
int temp;
public:
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif
[/code]

[code cpp]
#include
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
temp = 0;
Timer1->Enabled = true;
while(temp < 10){
//do nothing
}
Timer1->Enabled = false;
ShowMessage("時間到");

}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
temp ;
}

[/code]

小弟原先的構想是將Timer的Interval設為1秒,然後每次 1,加到10之後關掉Timer並顯示訊息,可是實際執行的時候似乎就卡在while不動了,想請問一下這是什麼原因??

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-08-17 17:23:57 IP:122.116.xxx.xxx 訂閱
試試在while裡面加入
while(temp < 10){
Application->ProcessMessages();
//do nothing
}
acmaeiou
一般會員


發表:4
回覆:9
積分:2
註冊:2010-06-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-08-18 14:12:15 IP:60.248.xxx.xxx 訂閱
感謝副站長的回答,想請問一下"Application"的詳細用法跟說的在那裡找得到,小弟在BCB6裡面的HELP裡沒有找到.....
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-08-18 14:31:09 IP:122.116.xxx.xxx 訂閱
Help找的到壓Key word:TApplication

===================引 用 acmaeiou 文 章===================
感謝副站長的回答,想請問一下"Application"的詳細用法跟說的在那裡找得到,小弟在BCB6裡面的HELP裡沒有找到.....
acmaeiou
一般會員


發表:4
回覆:9
積分:2
註冊:2010-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-08-19 01:45:40 IP:122.116.xxx.xxx 訂閱
感謝副站長提供關鍵字,小弟十分感謝!!
acmaeiou
一般會員


發表:4
回覆:9
積分:2
註冊:2010-06-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-08-26 00:20:25 IP:122.116.xxx.xxx 訂閱
又找到一篇文章,剛好修正小弟的觀念,原文出自:http://blog.yam.com/swwuyam/article/11149735

-------------------------------------------------------------------------------------------------------------------
有些人會有些錯誤的觀念 會認為timer是個thread
在此我們要糾正這個觀念
比方說 當我們按下一個按鈕之後 window系統便會對我們的程式發出一個message
我們便可以針對這個message來處理
timer其實就只是一個定時發出的message而已
他的處理方式以及會碰到的問題跟message是完全一樣的
且與multi-thread是完全不同的
比方說 如果我們在程式中跑一個無窮迴圈 timer就不會動了
但是如果是做multi-thread的話 還是會繼續動
還有 使用timer不需要考慮同步問題 (multi-thread才需要)
有些人會在timer程式中考慮同步問題 這是一點用都沒有的
以上 針對timer以及multi-thread不同點做出澄清
系統時間:2024-04-20 9:05:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!