【发布时间】:2011-09-04 23:03:47
【问题描述】:
我想在 SQLite 数据库中编写多个进程。这是我的 C++ 代码:
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);
【问题讨论】: