利用Timer實作Busying Waiting的問題 |
答題得分者是:taishyang
|
acmaeiou
一般會員 發表:4 回覆:9 積分:2 註冊:2010-06-18 發送簡訊給我 |
各位先進們好,小弟在想用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 發送簡訊給我 |
|
acmaeiou
一般會員 發表:4 回覆:9 積分:2 註冊:2010-06-18 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
acmaeiou
一般會員 發表:4 回覆:9 積分:2 註冊:2010-06-18 發送簡訊給我 |
|
acmaeiou
一般會員 發表:4 回覆:9 積分:2 註冊:2010-06-18 發送簡訊給我 |
又找到一篇文章,剛好修正小弟的觀念,原文出自: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不同點做出澄清 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |