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

While 的問題

答題得分者是:hagar
AJ
一般會員


發表:9
回覆:19
積分:20
註冊:2003-06-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-13 09:29:20 IP:211.21.xxx.xxx 未訂閱
最近遇到一個while的問題,我在程式中設置一個lock旗標,功用是避免不同函式同時存取相同全域record,當我的thread需存取時先檢查旗標是否為false,是則設為true,執行完畢再設為false,否則繼續檢查,其他函式亦相同。 檢查旗標我使用while來做,語法如下:
while true do
begin
    if lock then continue
    else lock:=true;
    .....
    .....
    lock:=false;
end;
這時就有問題了,當某一函式跑到while時,整個AP程式就停頓下來,一直在跑WHILE,確定不會陷入無限迴圈,但是thread卻很正常,看起來存取權似乎被thread佔住,可是thread中也使用以上相同語法,為什麼會這樣呢?有大大能幫我解惑嗎? 發表人 - AJ 於 2003/08/13 09:37:45
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-13 10:00:44 IP:218.16.xxx.xxx 未訂閱
試試
while true do
begin
    Application.ProcessMessages;
    if lock then continue
    else lock:=true;
    .....
    .....
    lock:=false;
end;
AJ
一般會員


發表:9
回覆:19
積分:20
註冊:2003-06-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-13 10:52:01 IP:211.21.xxx.xxx 未訂閱
引言: 試試
while true do
begin
    Application.ProcessMessages;
    if lock then continue
    else lock:=true;
    .....
    .....
    lock:=false;
end;
謝謝Justmade 可以請大大說明一下差別在哪裡呢?很想了解一下
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-13 17:47:50 IP:202.39.xxx.xxx 未訂閱
如果不加 Application.ProcessMessages; 這行的話 程式會一直處理 while 這個迴圈的工作 這時 AP 仍有在接收 message, 不過都放在 Queue 裏, 沒有處理 因此 AP 看起來像當掉了 而 Application.ProcessMessages; 這行的意思 就是先 "暫停" while 迴圈的工作 去處理 Queue 裏的 message 更詳細的可以看 ProcessMessages 的 help 說明. --- --<-<-<@
AJ
一般會員


發表:9
回覆:19
積分:20
註冊:2003-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-13 18:10:44 IP:211.21.xxx.xxx 未訂閱
原來是這樣喔,謝謝hagar 一直以來都很納悶,為什麼while沒錯,可以程式就是會停止回應,終於了解為什麼了,謝謝您!
系統時間:2024-07-02 3:39:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!