用ClientSocket1接收資訊,因為對方發送過來的資訊量比較大,平均每秒3-10條,結果整個程式都卡在那里了,根本不能動,開始以為是接了資訊之后處理的問題,后去掉接收資訊的存盤與顯示,還是卡,程式根本動不了。這是全部代碼:
procedure THIPSAPPFrm.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
Fitem,Sitem:Tlistitem;
begin
AttanceInt:=0;
資料決議部份略。。。。。
//此處將GB2312中文的解碼格式轉換為unicode通用中文解碼格式
Messtr:=UTF8Encode(Messtr);
Messtr:=UTF8Decode(Messtr);
//OAPPIMessage OIApp 將任務提交到APP服務器資料中心
AttanceInt:=GetAttanceUser(mobileID,Messtr);
if (strtoint(copy(mobileID,1,1)) in [0..9]) and (length(Messtr)>1) and(AttanceInt=1) then //此處判斷顯示的條件
begin
if setfrm.onRecSMSChB.Checked=true then
messtr:=Messtr+setfrm.HotelNoEdt.Text;
if setfrm.prefixcheck.Checked=true then
messtr:=Messtr+setfrm.HotelSignatureEdt.Text; ;
try
Fitem:=tsendListV.Items.Add;
with DataAPPCenter.AdoResultNum do
begin
close;
sql.Clear;
sql.Add('Insert into SendFcsM ([InfoId],[ID],[SendFcsMobile],[SendFcsStr],[SendStatus],[TaskState],[readState],[No],[AddTime]) values (NEWID(),0,'''+MobileID+''','''+Messtr+''',0,0,1,0,GETDATE())');
InsertNum:=execsql;
if (InsertNum>0) then
begin
Fitem.ImageIndex:=2;
WriteLogInfo(true,' SendFcsTaskAPPFaile:Mobile='+MobileID+';'+';SendContent='+Messtr)
end else
begin
Fitem.ImageIndex:=0;
DataConnTime.Enabled:=true;
self.SendAlarm(MobileID,Messtr); //補發短信到手機
WriteLogInfo(true,' SendFcsTaskSuccess:Mobile='+MobileID+';'+';SendContent='+Messtr);
end;
end;
except
Fitem.ImageIndex:=0;
DataConnTime.Enabled:=true;
self.SendAlarm(MobileID,Messtr); //補發短信到手機
WriteLogInfo(true,' SendFcsTaskSuccess:Mobile='+MobileID+';'+';SendContent='+Messtr);
end;
Fitem.SubItems.Add(MobileID);
Fitem.SubItems.Add(Messtr);
Fitem.SubItems.Add(datetimetostr(now()));
end;
end;
uj5u.com熱心網友回復:
self.SendAlarm(MobileID,Messtr); //補發短信到手機 有測過這句話的耗時嗎。平均5次每秒,也就是說你貼的函式每秒要跑5次左右,每次200毫秒能夠運行完嗎
uj5u.com熱心網友回復:
應該是你接收后的處理太耗時了。別說1秒10條。就是一秒100條也不會卡uj5u.com熱心網友回復:
發短信慢還是寫資料庫慢?uj5u.com熱心網友回復:
建立一個資料快取串列,先把資料接收到串列中,然后另外開一個執行緒按順序處理資料。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108847.html
標籤:VCL組件開發及應用
上一篇:檔案夾的移動復制
