在使用者與系統的互動過程中,允許使用者放棄請求的操作有時是必要的,尤其是涉及耗時的資料庫操作,需要長時間等待的時候.
可改善對使用者的響應,避免資料庫在已放棄操作上的沒有價值的開銷.
客戶端實現
.對可取消的操作指定訊息命令字.
服務端實現
.服務端決定哪些訊息需要非同步處理
.服務端以連線控制代碼和訊息命令字作為唯一鍵
.對於取消掛起的操作,各種資料庫實現不同,通過資料庫擴充套件模組實現.
.限制:
--只支援查詢命令
--當前連線上只支援乙個可取消操作
--只支援mysql,sql server.
取消非同步操作實現方式分別為:
sql server: ado recordset的cancel方法
mysql: (1) select connect_id() (2) kill %d (3) reconnect
以下是服務端使用的示例**:
///< 記錄非同步操作環境
pdbor->getdbext()->setasyncctx(casyncctxkey(in->connid[0],in->msg->getcmdserial()),prs);
///< 檢查查詢狀態,此操作可能被其它執行緒取消
long state = adstateexecuting;
do while(state==adstateexecuting);
pdbor->getdbext()->removeasyncctx(); ///< 取消該執行緒上的非同步操作等待
pdbor->releaserecordset(prs);
return 0;
}.取消非同步查詢
return 0;
}
資料庫非同步操作 ADODB
在vc或vb中需要耗時的查詢時,客戶一般需要等待很長一段時間,這種情況客戶是無法容忍而且也無法取消,那麼怎樣麼辦呢.1.首先採用多執行緒的方式,工作執行緒與ui執行緒分開,工作執行緒處理完畢時向主線程發消處理完畢的訊息 另一種方法採用向視窗傳送訊息.注意這裡是寄送的方式,不要問我為什麼,我也不會告訴...
VC資料庫ADO操作的說明
連線sql資料庫實用下列 connectionptr pmyconnect null hresult hr pmyconnect.createinstance uuidof connection if failed hr return bstr t strconnect provider sqlol...
資料庫同步非同步操作的使用場景
非同步同步 是針對資料來說的 對乙個資料的查詢如果是非同步操作 那麼對乙個資料的修改也最好要用非同步操作 以保證指令按順序到達 比如下面乙個場景 玩家a重複購買10積分的物品兩次 且玩家只有10積分 如果是同步查詢 非同步修改的話 很可能會出現玩家a的資料庫積分變成負數的情況 上面這個情況 因為第乙...