字串變量線程安全問題 |
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
我用一個字串變數(MsgRecvPool)來存放從Socket接收到的報文,然後用一個線程專門來分析與截取裏面的內容。Socket不斷的把資料加到MsgRecvPool的後面,而線程也不斷的析取MsgRecvPool中的內容,請問如果實現對MsgRecvPool的線程安全訪問? {報文提取線程類} var procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); procedure TParseThread.Execute;
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
不应该采用一个 string,然后用 string 的方式来保存多条报文。
1. 访问 string 不容易做thread safe 2. string 的操作是个非常消耗 cpu 的操作。尽量避免。 这里,最简单的做法,应该是拿一个 TThreadList 来保存每一条报文。这个 List 的类别是 thread safe 的,相关用法你可以查 help. 如果系统要求比较复杂,可能用单纯的 string 来保存报文已经不够。我的一个实际的程序里,一开始用多条 string 来保存报文,后来改用自己定一的类了。比如: TMyData = class(TObject) private FString: string; public ... ... end; 为了避免不停地 Create 和 Free 这个用来缓存报文的 MyData 对象,就要做一个对象池( Object Pool) 了。呵呵,最后,越做越复杂。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |