如題,在indy 編程中,我需要用服務端接收多個客戶端的資訊,并根據客戶端資訊回傳不同的結果
with AThread.Connection do
begin
try
//EnterCriticalSection(CS);
Tmpstr:=CurrentReadBuffer;
AThread.Synchronize(Addtmpstr);
if iRet >= 0 then
begin
Writeln(inttostr(iRet));
end
else
begin
writeln('匹配失敗或非法資料');
end;
// LeaveCriticalSection(CS);
tmpstr,iret為全域變數,iret在addtmpstr中被賦值(與tmpstr值有關),如果不設臨界區的話就會出現多個執行緒之間相互干擾的現象(不如客戶端1收到的是本應該是2的值),如果設臨界區的話(把//打開),如果其中一個客戶端只建立連接而不發送資料的話,執行緒就會阻塞在Tmpstr:=CurrentReadBuffer;這里,臨界區無法釋放,其他客戶端就無法與服務器交流。
uj5u.com熱心網友回復:
求高手啊!!!!!好像還有一種解決多執行緒之間的干擾辦法是設執行緒區域變數,不知道怎么做?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/149113.html
標籤:網絡通信/分布式開發
上一篇:delphi execl 為什么我的第一列顯示出來的 是16進制的數
下一篇:TQRImage設定底層為透明?
