線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:977
推到 Plurk!
推到 Facebook!

在Thread內使用TQuery.

尚未結案
white
一般會員


發表:18
回覆:7
積分:5
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-09 00:50:34 IP:218.164.xxx.xxx 未訂閱
請問像底下這樣寫會不會出問題? 在Thread內使用TQuery是否需要處理同步? void __fastcall TServerThread::Execute(void) { ; ; if(!DataModule1->CheckIp(FSocket->RemoteAddress))Terminate(); } //unit_dmod1.cpp 內容 bool __fastcall TDataModule1::CheckId(String Ip) { Query1->Active=false; Query1->SQL->Text="SELECT Id FROM IpList WHERE Ip='" Ip "' LIMIT 1"; Query1->Active=true; if(Query1->RecordCount>=1) { Query1->Active=false; Query1->SQL->Text="UPDATE IpList SET Count1=Count1 1 WHERE Ip='" Ip "' LIMIT 1"; Query1->ExecSQL(); return true; }else return false; }
------
white
artist1002
高階會員


發表:2
回覆:155
積分:151
註冊:2002-09-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-20 21:02:58 IP:211.76.xxx.xxx 未訂閱
如果你會使用很多的thread就要處理同步的問題 但是如果你只會開一個thread就可以不用了 但是要注意你的主程式會不會使用到TQuery1 如果會使用的TQuery1的話就比較麻煩 還要額外處理主程式和Thread之間的同步問題
white
一般會員


發表:18
回覆:7
積分:5
註冊:2003-02-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-21 19:53:32 IP:218.164.xxx.xxx 未訂閱
引言: 如果你會使用很多的thread就要處理同步的問題 但是如果你只會開一個thread就可以不用了 但是要注意你的主程式會不會使用到TQuery1 如果會使用的TQuery1的話就比較麻煩 還要額外處理主程式和Thread之間的同步問題
謝謝回應. 我的thread數量是每個client連線時會產生一個,主程式也可能共用到Query.因為都可能用到DataModule內的function.但Query沒有關連到任何感知元件,用完馬上就close. 我目前做法是放置10個Query並宣告成元件陣列,利用Query(其實是TZMySqlQuery一個存取MySQL的套件)的Tag當Busy flag判斷要用那一個Query.好像沒什麼問題發生.暫時解決了這個問題. white
------
white
artist1002
高階會員


發表:2
回覆:155
積分:151
註冊:2002-09-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-22 21:46:15 IP:211.76.xxx.xxx 未訂閱
既然你已經做了busy的判斷就可以避免共用元件可能會產生的問題 不過同步主要是避免主要的MainForm Thread和自訂的Thread產生衝突 衝突的原因通常是來自於共用元件或是記憶體的區段 不過在BCB有一些method已經是thread safe了, 可以直接使用 如果不確定的話還是要使用Synchronize()來處理有危險的程式碼
系統時間:2024-03-29 12:41:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!