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

Reentrant的問題

答題得分者是:aftcast
pluto0327
一般會員


發表:2
回覆:0
積分:0
註冊:2004-08-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-04-28 09:24:48 IP:220.128.xxx.xxx 訂閱
想請教的問題是
我在視窗點選元件觸發 FilterClick(),
程式在Funciton()中
我又持續觸發 FilterClick
這裡視窗的觀念是怎麼樣?
Message loop目前是什麼情況呢?
麻煩解惑 謝謝


void __fastcall TfrmLight::FilterClick(TObject *Sender)
{
Function() ;
}

void Function()
{
Action_WaitTime(10);
// to do something
}

void __fastcall TfrmRecipeLight::Action_WaitTime(int sec)
{
DWORD nCurrentTime = GetTickCount();
DWORD WaitTime = sec* 1000;
while(true)
{
if(GetTickCount() - nCurrentTime > sec)
break;
Application->ProcessMessages();
}
}
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-03 12:39:06 IP:210.64.xxx.xxx 訂閱

1/ 時間未到時 (紅色部份)
FilterClick() -> Function-> Application->ProcessMessages()
-> FilterClick() -> Function-> Application->ProcessMessages()
-> FilterClick() -> Function-> Application->ProcessMessages()->mouse…->keyboard…->其他事件等處理函式……

2/ 時間到了 (紅色部份) 紅的就不見了,然後剩藍的與黑的

-> FilterClick() -> Function-> Application->ProcessMessages()
-> FilterClick() -> Function-> Application->ProcessMessages()

反回的條件是最後觸發的那次 funciton 裡的時間到了,且完成function裡的 to do something

這裡沒有reentrant的問題! 使用thread,"真"平行處理時才有reentrant的問題。

===================引 用 pluto0327 文 章===================
想請教的問題是
我在視窗點選元件觸發 FilterClick(),
程式在Funciton()中
我又持續觸發 FilterClick
這裡視窗的觀念是怎麼樣?
Message loop目前是什麼情況呢?
麻煩解惑 謝謝


void __fastcall TfrmLight::FilterClick(TObject *Sender)
{
Function();
}

void Function()
{
Action_WaitTime(10);
// to do something
}

void __fastcall TfrmRecipeLight::Action_WaitTime(int sec)
{
DWORD nCurrentTime = GetTickCount();
DWORD WaitTime = sec* 1000;
while(true)
{
if(GetTickCount() - nCurrentTime > sec)
break;
Application->ProcessMessages();
}
}
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2011-05-02 22:42:29, 註解 無‧
aftcast 重新編輯於 2011-05-02 22:47:20, 註解 無‧
aftcast 重新編輯於 2011-05-02 22:48:51, 註解 無‧
aftcast 重新編輯於 2011-05-02 22:51:57, 註解 無‧
aftcast 重新編輯於 2011-05-02 22:57:01, 註解 無‧
aftcast 重新編輯於 2011-05-02 22:58:44, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-03 13:47:46 IP:210.64.xxx.xxx 訂閱
你好,
不確定你是否看到我最後修正的內容,所以再回覆一次!

===================引 用 aftcast 文 章===================

1/ 時間未到時 (紅色部份)
FilterClick() -> Function-> Application->ProcessMessages()
-> FilterClick() -> Function-> Application->ProcessMessages()
-> FilterClick() -> Function-> Application->ProcessMessages()->mouse…->keyboard…->其他事件等處理函式……

2/ 時間到了 (紅色部份) 紅的就不見了,然後剩藍的與黑的

-> FilterClick() -> Function-> Application->ProcessMessages()
-> FilterClick() -> Function-> Application->ProcessMessages()

反回的條件是最後觸發的那次 funciton 裡的時間到了,且完成function裡的 to do something

這裡沒有reentrant的問題! 使用thread,"真"平行處理時才有reentrant的問題。


------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2017-10-18 18:55:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!