变量怎样在 主进程与线程 之间同步? |
尚未結案
|
One2Free
一般會員 發表:26 回覆:28 積分:20 註冊:2004-05-12 發送簡訊給我 |
|
OsX
版主 發表:6 回覆:151 積分:111 註冊:2003-05-03 發送簡訊給我 |
使用 TCriticalSection, 在主執行緒及其它的執行緒中, 當要讀寫
佇列中的資料時, 一律用 TCriticalSection Block 住其它的執行緒,
Ex: //aLock ---> TCriticalSection; aLock.Enter; try aText := aStrList.Strings[0]; aStrList.Delete( 0 ); finally aLock.Leave; end;或是你可以用 TThreadList 來使用 Ex: aList := aThreadList.LockList; try x := aList.Items[0]; aList.Delete( 0 ); finally aThreadList.UnlockList; end; |
One2Free
一般會員 發表:26 回覆:28 積分:20 註冊:2004-05-12 發送簡訊給我 |
|
OsX
版主 發表:6 回覆:151 積分:111 註冊:2003-05-03 發送簡訊給我 |
引言: 个人认为,用消息来同步更适合我.純討論, 小弟認為在這種情形下, 用消息做同步是可行, 但不是最好的做法, 假設你的程式現在又多了2~3個 Thread 也要同時存取(新增或刪除或讀取)這個佇列資料, 那用 消息方法來做同步, 不就要另外對這些 Thread 發送消息, 既然要發送, 是不是就有 Message 發送先後順序的問題 ? 會須要 Thread 同步是因為佇列並不是 Thread Safe 的, 所以只要利用 CriticalSection 或 Event 或 Mutex 等 這些 Window 提供的 Sync Object , 來取得讀寫佇列的 優先權, 就可以達到您要的效果, 如果只是純粹控制佇 列讀寫的同步, 小弟認為這是可行但不是最佳的做法 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |