关于多线程共享同一数据集(Table或Query)的问题. |
尚未結案
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
qoo1234
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
我在開發二類收款機通訊的系統時,為了實現多台收款機同時下載資料採用多執行緒處理,即每一台收款機發出下載請求時,創建一個執行緒為其下載資料.現在遇到一個問題:
在下載商品資料時因資料量很大,如果在每一個執行緒中讀取要下載的資料,造成響應速度太慢.所以考慮先將資料讀出(Table或Query),各執行緒再共享同一資料集的資料,但這樣做似乎不行,因為多執行緒在同一資料集中移動記錄就亂成一團了.
請問:有什麼好的方法解決,請給我提供一些例子.謝謝! ==================================================
請提供你的方式(例如:簡短程式碼),已方便處理,加油~
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
qoo1234:
处理与二类收款机的通讯的程序主要工作是将下载数据按一定的格式(STX LEN DATA CRC)下载给收款机,并将收到的数据分解成保存在数据库中的数据.因为代码太长无法贴上,下面做一个主要流程的描述:
procedure TSalServerF.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
SendPLU.Create(False); //启动下载线程(Thread)
end; type
SendPlu = class(TThread)
private
{ Private declarations }
lll:integer;
// iSID:integer;
Conn:TCustomWinSocket;
RcvStr:string;
dsIP:string;
protected
procedure Execute; override;
function SendAllPlu():Boolean;
end; implementation procedure SendPlu.Execute;
begin
{ Place thread code here }
OnTerminate:=SalServerF.PluThreadEndEvent;
FreeOnTerminate:=True;
SendAllPlu(); //下载数据
end; function SendPlu.SendAllPlu():Boolean;
begin
quSource:=TQuery.Create(nil); //每次线程被建立后从数据库中读数据
with quSource do
begin
.... //从数据库中读要下载的数据
end;
...... //下载数据的代码.
end;
因下载数据是下载线程建立时才去读取,如果要读数据很多,响应会很慢.有没有什么方法能提高这部份的处理速度?
谢谢 發表人 - fangwy 於 2003/09/15 09:23:43
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |