Thread中callback和UI的更新 |
答題得分者是:aftcast
|
ttnnrsseb
中階會員 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
各位先進好,
我參考了底下的連結,它是比較三種計時器的範例: http://tc.chinawin.net/it/softwaredev/article-66a7.html 其中一種,利用 timeSetEvent,帶入callback,範例中的callback是這樣寫的: [code delphi] procedure TimeProc(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD) stdcall; begin Form1.Edit2.Text:=FloatToStr(smmCount); smmCount:=smmCount-0.01; end; [/code] 我實測發現處理UI的地方會有問題, 以前在Thread中要更改UI是用Synchronize,如果是Thread callback回來的,要如何處理UI呢? 不吝指教,謝謝。 編輯記錄
ttnnrsseb 重新編輯於 2015-05-22 10:48:43, 註解 無‧
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
試一下下面的方式: procedure TimeProc(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD) stdcall; begin
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
ttnnrsseb
中階會員 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
把我上面程式中queue改Synchronize這個字再試一下。再錯就很不合理了。^_^
===================引 用 ttnnrsseb 文 章===================感謝蕭大俠的回覆, 試了一下,多跑幾次還是會出現問題,不過機率不高。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
ttnnrsseb
中階會員 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
網上有看到多包了一層,目前試起來還沒問題。還真沒寫過這種奇怪的寫法。
[code delphi] procedure TimeProc(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD) stdcall; var aTask: ITask; begin aTask := TTask.Create(procedure begin TThread.Queue(nil, procedure begin //不要直接處理UI Form1.Edit2.Text := FloatToStr(smmCount); smmCount := smmCount - 0.01; end); end); aTask.Start; end; [/code]
編輯記錄
ttnnrsseb 重新編輯於 2015-05-22 14:05:20, 註解 無‧
|
ttnnrsseb
中階會員 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
|
ttnnrsseb
中階會員 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
Dear 蕭大俠,
目前用上面的ITask Synchronize,還沒遇過錯誤,不過我還不知道為什麼要這樣寫。 大概了解Queue是非阻塞式的,Synchronize是阻塞式的,所以理論上Synchronize應該不會有問題。 會不會是FireMonkey比較奇怪,查了一下資料 System.Threading‧ITask是XE7才新增的,用來做並行處理的。 對岸有個簡單的範例: http://blog.csdn.net/henreash/article/details/41347843
編輯記錄
ttnnrsseb 重新編輯於 2015-05-22 14:39:13, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |