程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中實現多線程同步查詢(1)

Delphi中實現多線程同步查詢(1)

編輯:Delphi
優秀的數據庫應用應當充分考慮數據庫訪問的速度問題。通常可以通過優化數據庫、優化 查詢語句、分頁查詢等途徑收到明顯的效果。即使是這樣,也不可避免地會在查詢時閃現一個帶有 SQL符號的沙漏,即鼠標變成了查詢等待。最可憐的是用戶,他(她)在此時只能無奈地等待。遇到急性子的,干脆在此時嘗試 Windows中的其它應用程序,結果致使你的數據庫應用顯示一大片白色的窗口。真是無奈!

  本文將以簡單的例子告訴你如何實現線程查詢。還等什麼,趕快打開Delphi對照著下面的完整源代碼試試吧。

  在查詢時能夠做別的事情或者取消查詢,這只是基本的線程查詢,在你閱讀了Delphi有關線程幫助之後能立刻實現。這裡介紹的是多個線程查詢的同步進行。

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

  實現多線程同步查詢的基本思想是,為每一個查詢組件(如TQuery組件)創建一個獨占的 數據庫會話,然後各自進行數據庫訪問。需要特別注意的是,因為Delphi中的 VCL組件大多都 不是線程安全的,所以應當在線程查詢結束後再將DataSource組件與查詢組件關聯,從而顯示 在DBGrid組件中。

  下面的例子只實現了靜態的線程同步查詢,即線程對象是固定的,並隨窗體的創建和銷毀 而創建和銷毀。你可以就此進行改進,為每一個數據查詢或數據操縱命令創建一個單獨的線程對象,從而達到多線程同步查詢的目的。

  注意:應用程序中的線程不是越多越好,因為線程將嚴重吞噬CPU資源,盡管看上去並不明顯。謹慎創建和銷毀線程將避免你的應用程序導致系統資源崩潰。

  下面的例子給出了同時進行的兩個線程查詢。第一次按下按鈕時,線程開始執行;以後每次按下按鈕時,如果線程處於掛起狀態則繼續執行,否則掛起線程;線程執行完畢之後將連接 DataSource,查詢結果將顯示在相應的DBGrid中。 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved