亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? delphi中實(shí)現(xiàn)多線程同步查詢 (2001年6月8日).txt

?? delphi 編程技巧
?? TXT
字號(hào):
Delphi中實(shí)現(xiàn)多線程同步查詢 (2001年6月8日) 

本站更新  分類:數(shù)據(jù)庫(kù)   作者:賽迪網(wǎng)  推薦:   閱讀次數(shù):222  
(http://www.codesky.net)  

--------------------------------------------------------------------------------

優(yōu)秀的數(shù)據(jù)庫(kù)應(yīng)用應(yīng)當(dāng)充分考慮數(shù)據(jù)庫(kù)訪問(wèn)的速度問(wèn)題。通常可以通過(guò)優(yōu)化數(shù)據(jù)庫(kù)、優(yōu)化 查詢語(yǔ)句、分頁(yè)查詢等途徑收到明顯的效果。即使是這樣,也不可避免地會(huì)在查詢時(shí)閃現(xiàn)一個(gè)帶有 SQL符號(hào)的沙漏,即鼠標(biāo)變成了查詢等待。最可憐的是用戶,他(她)在此時(shí)只能無(wú)奈地等待。遇到急性子的,干脆在此時(shí)嘗試 Windows中的其它應(yīng)用程序,結(jié)果致使你的數(shù)據(jù)庫(kù)應(yīng)用顯示一大片白色的窗口。真是無(wú)奈!

本文將以簡(jiǎn)單的例子告訴你如何實(shí)現(xiàn)線程查詢。還等什么,趕快打開(kāi)Delphi對(duì)照著下面的完整源代碼試試吧。

在查詢時(shí)能夠做別的事情或者取消查詢,這只是基本的線程查詢,在你閱讀了Delphi有關(guān)線程幫助之后能立刻實(shí)現(xiàn)。這里介紹的是多個(gè)線程查詢的同步進(jìn)行。

在Delphi數(shù)據(jù)庫(kù)應(yīng)用中,都有一個(gè)缺省的數(shù)據(jù)庫(kù)會(huì)話 Session。通常情況下,每個(gè)數(shù)據(jù)庫(kù)應(yīng)用中只有這一個(gè)會(huì)話。無(wú)論是查詢函數(shù)修改數(shù)據(jù),在同一時(shí)間內(nèi)只能進(jìn)行其中的一件事情, 而且進(jìn)行這一件事情的時(shí)候應(yīng)用程序不能響應(yīng)鍵盤、鼠標(biāo)以及其它的 Windows消息。這就是在 窗口區(qū)域會(huì)顯示一片空白的原因所在。當(dāng)然,只要將查詢或數(shù)據(jù)操縱構(gòu)造成線程對(duì)象,情況會(huì)好一些,至少可以接受窗口消息,也可以隨時(shí)終止查詢或數(shù)據(jù)操縱,而不會(huì)在屏幕上顯示出太難看的白色。不過(guò),這只是解決了問(wèn)題的一部分。假如在進(jìn)行一個(gè)線程查詢的時(shí)候,用戶通過(guò) 按鈕或菜單又發(fā)出了另一個(gè)查詢的命令,這可如何是好,難道終止正在執(zhí)行的數(shù)據(jù)庫(kù)訪問(wèn)嗎? 解決之道就是:多線程同步查詢。

實(shí)現(xiàn)多線程同步查詢的基本思想是,為每一個(gè)查詢組件(如TQuery組件)創(chuàng)建一個(gè)獨(dú)占的 數(shù)據(jù)庫(kù)會(huì)話,然后各自進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn)。需要特別注意的是,因?yàn)镈elphi中的 VCL組件大多都 不是線程安全的,所以應(yīng)當(dāng)在線程查詢結(jié)束后再將DataSource組件與查詢組件關(guān)聯(lián),從而顯示 在DBGrid組件中。

下面的例子只實(shí)現(xiàn)了靜態(tài)的線程同步查詢,即線程對(duì)象是固定的,并隨窗體的創(chuàng)建和銷毀 而創(chuàng)建和銷毀。你可以就此進(jìn)行改進(jìn),為每一個(gè)數(shù)據(jù)查詢或數(shù)據(jù)操縱命令創(chuàng)建一個(gè)單獨(dú)的線程對(duì)象,從而達(dá)到多線程同步查詢的目的。

注意:應(yīng)用程序中的線程不是越多越好,因?yàn)榫€程將嚴(yán)重吞噬CPU資源,盡管看上去并不明顯。謹(jǐn)慎創(chuàng)建和銷毀線程將避免你的應(yīng)用程序?qū)е孪到y(tǒng)資源崩潰。

下面的例子給出了同時(shí)進(jìn)行的兩個(gè)線程查詢。第一次按下按鈕時(shí),線程開(kāi)始執(zhí)行;以后每次按下按鈕時(shí),如果線程處于掛起狀態(tài)則繼續(xù)執(zhí)行,否則掛起線程;線程執(zhí)行完畢之后將連接 DataSource,查詢結(jié)果將顯示在相應(yīng)的DBGrid中。

{ 這里的多線程同步查詢演示程序僅包括一個(gè)工程文件和一個(gè)單元文件 }
{ 窗體中放置的組件有: }
{ 兩個(gè)Session組件 }
{ 兩個(gè)Database組件 }
{ 兩個(gè)Query組件 }
{ 兩個(gè)DataSource組件 }
{ 兩個(gè)DBGrid組件 }
{ 一個(gè)Button組件 }
{ 除非特別說(shuō)明,否則上述各組件的屬性都取默認(rèn)值(見(jiàn)各組件注釋) }
{ 對(duì)于Database組件,就和一般設(shè)置一樣,有一個(gè)正確的連接即可 }
{ 對(duì)于Query 組件,需要在各自的屬性 SQL中添加一些查詢語(yǔ)句,為了 }
{ 看得更清除,建議不要在兩個(gè)Query 組件中填寫相同的查詢語(yǔ)句。 }

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids, StdCtrls;

type
TForm1 = class(TForm)
Session1: TSession; { 屬性SessionName填寫為S1 }
Database1: TDatabase; { 屬性SessionName選擇為S1 }
Query1: TQuery;{ 屬性Database選擇為Database1;屬性SessionName選擇為S1 }
DataSource1: TDataSource; { 屬性DataSet設(shè)置為空 }
DBGrid1: TDBGrid; { 屬性DataSource選擇為DataSource1 }
Session2: TSession; { 屬性SessionName填寫為S2 }
Database2: TDatabase; { 屬性SessionName選擇為S2 }
Query2: TQuery;{ 屬性Database選擇為Database2;屬性SessionName選擇為S2 }
DataSource2: TDataSource; { 屬性DataSet設(shè)置為空 }
DBGrid2: TDBGrid; { 屬性DataSource選擇為DataSource2 }
BtnGoPause: TButton; { 用于執(zhí)行和掛起線程 }
procedure FormCreate(Sender: TObject); { 創(chuàng)建窗體時(shí)創(chuàng)建線程對(duì)象 }
procedure FormDestroy(Sender: TObject); { 銷毀窗體時(shí)銷毀線程對(duì)象 }
procedure BtnGoPauseClick(Sender: TObject); { 執(zhí)行線程和掛起線程 }
private
public
end;

TThreadQuery = class(TThread) { 聲明線程類 }
private
FQuery: TQuery; { 線程中的查詢組件 }
FDataSource: TDataSource; { 與查詢組件相關(guān)的數(shù)據(jù)感知組件 }
procedure ConnectDataSource;{ 連接數(shù)據(jù)查詢組件和數(shù)據(jù)感知組件的方法 }
protected
procedure Execute; override;{ 執(zhí)行線程的方法 }
public
constructor Create(Query: TQuery;
DataSource: TDataSource); virtual; { 線程構(gòu)造器 }
end;

var
Form1: TForm1;
Q1, { 線程查詢對(duì)象1 }
Q2: TThreadQuery; { 線程查詢對(duì)象2 }

implementation

{$R *.DFM}

{ TThreadQuery類的實(shí)現(xiàn) }

{ 連接數(shù)據(jù)查詢組件和數(shù)據(jù)感知組件}
procedure TThreadQuery.ConnectDataSource;
begin
FDataSource.DataSet := FQuery;{ 該方法在查詢結(jié)束后才調(diào)用 }
end;

procedure TThreadQuery.Execute;{ 執(zhí)行線程的方法 }
begin
try
FQuery.Open; { 打開(kāi)查詢 }
Synchronize(ConnectDataSource);{ 線程同步 }
except
ShowMessage('Query Error'); { 線程異常 }
end;
end;

{ 線程查詢類的構(gòu)造器 }
constructor TThreadQuery.Create(Query: TQuery; DataSource: TDataSource);
begin
FQuery := Query;
FDataSource := DataSource;
inherited Create(True);
FreeOnTerminate := False;
end;

{ 創(chuàng)建窗體時(shí)創(chuàng)建線程查詢對(duì)象 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Q1 := TThreadQuery.Create(Query1, DataSource1);
Q2 := TThreadQuery.Create(Query2, DataSource2);
end;

{ 銷毀窗體時(shí)銷毀線程查詢對(duì)象 }
procedure TForm1.FormDestroy(Sender: TObject);
begin
Q1.Terminate; { 銷毀之前終止線程執(zhí)行 }
Q1.Destroy;
Q2.Terminate; { 銷毀之前終止線程執(zhí)行 }
Q2.Destroy;
end;

{ 開(kāi)始線程、繼續(xù)執(zhí)行線程、掛起線程 }
procedure TForm1.BtnGoPauseClick(Sender: TObject);
begin
if Q1.Suspended then Q1.Resume else Q1.Suspend;
if Q2.Suspended then Q2.Resume else Q2.Suspend;
end;

end.  
 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产无人区一区二区三区| 日本精品视频一区二区| 91精品国产综合久久香蕉麻豆| 亚洲色图制服诱惑| 91精彩视频在线观看| 亚洲一区二区三区美女| 欧美日韩高清一区| 久久国产精品72免费观看| 精品国产一区二区三区久久影院| 激情都市一区二区| 国产精品私房写真福利视频| 91麻豆国产精品久久| 亚洲一区二区偷拍精品| 91精品国产高清一区二区三区| 麻豆精品一区二区av白丝在线| 久久久久99精品国产片| 99国产精品久久久久| 亚洲一区二区欧美| 精品成人免费观看| aaa亚洲精品一二三区| 婷婷亚洲久悠悠色悠在线播放| 日韩久久久精品| 成人av在线影院| 亚洲自拍欧美精品| www国产成人免费观看视频 深夜成人网| 国产精品一级黄| 亚洲图片欧美视频| 26uuu成人网一区二区三区| 91在线视频播放| 日韩 欧美一区二区三区| 国产精品每日更新在线播放网址 | 成人蜜臀av电影| 亚洲午夜在线电影| 久久众筹精品私拍模特| 在线观看亚洲一区| 粉嫩嫩av羞羞动漫久久久| 亚洲第一会所有码转帖| 久久久久久久久久久电影| 欧美视频一区二| 成人aa视频在线观看| 蜜臀久久久久久久| 亚洲精品国产精华液| xfplay精品久久| 3atv在线一区二区三区| 97久久精品人人澡人人爽| 久久不见久久见免费视频7| 亚洲人精品一区| 久久奇米777| 91精品国产品国语在线不卡| 91免费看`日韩一区二区| 国产制服丝袜一区| 午夜精品免费在线| 亚洲精品国产精华液| 国产性天天综合网| 久久综合色天天久久综合图片| 欧美三级视频在线| 色噜噜夜夜夜综合网| 国产69精品一区二区亚洲孕妇 | 免费视频一区二区| 曰韩精品一区二区| 亚洲欧洲日本在线| 中文字幕精品在线不卡| 久久久久88色偷偷免费| 日韩精品一区二区三区蜜臀| 在线不卡免费av| 欧美图区在线视频| 色成人在线视频| 91美女片黄在线| 99精品桃花视频在线观看| 国产91精品在线观看| 韩国视频一区二区| 激情伊人五月天久久综合| 日韩国产欧美三级| 人人精品人人爱| 日韩高清一区在线| 日本不卡一二三| 日韩影视精彩在线| 青草av.久久免费一区| 日韩精品电影一区亚洲| 日欧美一区二区| 日产欧产美韩系列久久99| 日本欧美肥老太交大片| 免费视频一区二区| 国产在线播放一区二区三区| 九色综合国产一区二区三区| 久久99最新地址| 国产一区二区三区观看| 懂色av一区二区夜夜嗨| 国产成人自拍在线| 91女厕偷拍女厕偷拍高清| 色综合欧美在线视频区| 欧美亚洲动漫另类| 91精品综合久久久久久| 欧美mv和日韩mv国产网站| 午夜激情久久久| 日韩国产高清影视| 久久99久久99小草精品免视看| 激情综合网天天干| 国产成人综合在线| 久久精品国产久精国产| 亚洲不卡在线观看| 免费久久精品视频| 狠狠色2019综合网| 成人免费看黄yyy456| 91小视频免费观看| 欧美日韩在线精品一区二区三区激情| 在线观看不卡视频| 日韩亚洲欧美在线| 国产午夜久久久久| √…a在线天堂一区| 亚洲成人动漫精品| 国产精品亚洲专一区二区三区| 成人av一区二区三区| 欧美日韩在线播放| 久久综合久久鬼色中文字| **性色生活片久久毛片| 丝袜亚洲另类欧美| 国产成人亚洲综合a∨婷婷 | 欧美精品一区二区蜜臀亚洲| 国产欧美精品一区二区色综合| 亚洲男同性视频| 久久精品国产第一区二区三区| 日韩午夜小视频| 国产日本亚洲高清| 香港成人在线视频| 成人免费电影视频| 欧美日韩高清一区| 国产精品青草久久| 日韩电影在线一区二区| 国产宾馆实践打屁股91| 欧美美女bb生活片| 欧美国产一区二区| 男人的j进女人的j一区| 99久久久无码国产精品| 欧美一级生活片| 亚洲天堂网中文字| 极品美女销魂一区二区三区免费| 色综合一个色综合亚洲| 亚洲精品一区二区三区在线观看 | 成人深夜在线观看| 日韩一二三区不卡| 亚洲成人一二三| 成人免费视频视频在线观看免费| 制服丝袜日韩国产| 亚洲精品菠萝久久久久久久| 国产毛片一区二区| 91精品国产综合久久小美女| 亚洲精品五月天| 国产91高潮流白浆在线麻豆| 欧美欧美欧美欧美首页| 亚洲色图清纯唯美| 国产成人亚洲综合a∨婷婷图片| 欧美一区二区福利视频| 亚洲夂夂婷婷色拍ww47| 99精品视频在线免费观看| 国产亚洲短视频| 精品综合久久久久久8888| 欧美日韩美女一区二区| 亚洲午夜在线观看视频在线| 色综合久久六月婷婷中文字幕| 国产亚洲综合色| 国产一区二区三区日韩 | av成人免费在线观看| 久久久久国产精品麻豆| 国内精品久久久久影院色| 日韩一区二区中文字幕| 肉丝袜脚交视频一区二区| 欧美三级三级三级爽爽爽| 亚洲尤物视频在线| 欧美丝袜丝nylons| 香蕉影视欧美成人| 6080yy午夜一二三区久久| 婷婷综合久久一区二区三区| 欧美久久一二三四区| 亚洲高清免费观看高清完整版在线观看| 972aa.com艺术欧美| 亚洲品质自拍视频网站| 色综合天天天天做夜夜夜夜做| 亚洲欧洲另类国产综合| 91影院在线观看| 一区二区三区在线不卡| 色哟哟一区二区| 亚洲一区二区欧美激情| 欧美日韩国产首页在线观看| 日韩国产一二三区| 欧美一区二区人人喊爽| 韩国av一区二区三区| 欧美国产乱子伦| 99视频国产精品| 亚洲一区二区av电影| 欧美日韩性生活| 老司机一区二区| 国产午夜亚洲精品不卡| 一本色道a无线码一区v| 日韩精品电影一区亚洲| 26uuu国产一区二区三区| av电影天堂一区二区在线| 亚洲风情在线资源站| 精品国产乱码久久久久久老虎 | 久久国产精品第一页|