全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:720
推到 Plurk!
推到 Facebook!

变量怎样在 主进程与线程 之间同步?

尚未結案
One2Free
一般會員


發表:26
回覆:28
積分:20
註冊:2004-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-18 09:12:34 IP:61.143.xxx.xxx 未訂閱
要写个程序,在主进程中不断接收数据,并写入队列顶部, 同时 有个处理线程 不断地检查队列中是否有数据,如果有从队列的底部读出数据,并把这个结点删除。 如果不进行同步处理,程序会有出现异常的可能。所以请教各位大侠:主进程 与 线程 之间的同步方法。
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-21 21:11:29 IP:60.248.xxx.xxx 未訂閱
使用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-25 08:42:34 IP:61.143.xxx.xxx 未訂閱
个人认为,用消息来同步更适合我.
OsX
版主


發表:6
回覆:151
積分:111
註冊:2003-05-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-27 13:44:39 IP:60.248.xxx.xxx 未訂閱
引言: 个人认为,用消息来同步更适合我.
純討論, 小弟認為在這種情形下, 用消息做同步是可行, 但不是最好的做法, 假設你的程式現在又多了2~3個 Thread 也要同時存取(新增或刪除或讀取)這個佇列資料, 那用 消息方法來做同步, 不就要另外對這些 Thread 發送消息, 既然要發送, 是不是就有 Message 發送先後順序的問題 ? 會須要 Thread 同步是因為佇列並不是 Thread Safe 的, 所以只要利用 CriticalSection 或 Event 或 Mutex 等 這些 Window 提供的 Sync Object , 來取得讀寫佇列的 優先權, 就可以達到您要的效果, 如果只是純粹控制佇 列讀寫的同步, 小弟認為這是可行但不是最佳的做法
系統時間:2024-07-05 4:10:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!