我想在SQLite數據庫中編寫幾個進程。這裏是我的c + +代碼:C++/SQLite - 具有多個進程的db訪問
stringstream sstream << "BEGIN;" << query << "COMMIT;";
sqlite3_busy_timeout(databasePtr, 60000); // set timeout if sql busy
if((result = sqlite3_exec(databasePtr, (sstream.str()).c_str(), NULL, NULL, NULL)) != SQLITE_OK){
/** ERROR or SQLITE_BUSY **/
}
sqlite3_busy_timeout(databasePtr, 0); // reset sql_busy handler
我認爲sqlite3_busy_timeout導致成功。但我檢查了結果,發現並非所有數據都寫入數據庫。我的錯誤在哪裏?
有人知道當sqlite3_busy_timeout設置爲60000(ms)時,sqlite3_exec被調用的頻率如何?或者如果第一次嘗試返回SQLITE_BUSY,那麼在60000(ms)之後只有一個調用?
我試着用下面的代碼解決問題。但它看起來像一直只有一個活躍的過程。對於其他的處理沒有完成......
do{
if((result = sqlite3_exec(databasePtr, (sstream.str()).c_str(), NULL, NULL, NULL)) != SQLITE_OK){
if(result == SQLITE_BUSY){
sleep(60000); // sleep 10 sec
}else{
/** ERROR **/
}
}
}while(result == SQLITE_BUSY);