c++ /SQLite -数据库访问与多进程
C++/SQLite - db access with multiple processes
我想在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被调用的频率吗?或者在60000 (ms)之后只有一个调用,如果第一次尝试返回SQLITE_BUSY?
我试着用下面的代码来解决这个问题。但看起来一直只有一个活动进程。其他进程将不会完成…
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);
由sqlite3_busy_timeout (sqliteDefaultBusyCallback() in src/main.c)安装的默认繁忙处理程序休眠1ms,然后再次尝试,然后为2ms, 5ms…直到总睡眠时间超过指定的超时值。
所以你的修复基本上复制了内部所做的事情,但是有了不可用的长等待时间(sleep()的参数是以秒为单位的,所以你的代码休眠了大约18个小时)。顺便说一下,即使是60000ms = 60s对于sqlite3_busy_timeout中的超时来说似乎也太长了,更不用说重试之间的后退时间了。
相关文章:
- c++多进程编写一个唯一的文件
- 通过switch和static_cast访问多态对象的运行时类型
- 为什么 Windows 拒绝访问某些进程的名称?
- 在 Windows/C++ 上使用多进程应用程序的高精度定时操作
- 访问多层结构会导致错误
- 用于循环访问多个集合的数据结构
- 优化吞吐量:多线程与多进程
- 循环访问多个模板参数的递归模板函数
- 一个类似 std::访问的函数,用于访问多态类型
- 访问多个阵列时 CPU 缓存的作用是什么?
- 进程退出,返回值3221225477访问多维向量
- 数据架构,可快速访问多个密钥或密钥和优先级
- 如何在 Python 进程中访问由C++进程创建的互斥锁
- 如何访问多映射C++中的特定元素
- 如何访问多个继承类中的受保护成员
- 如何根据用户输入创建和访问多个对象 - C++
- 传递并访问多个参数到pthread函数
- 访问多个源文件中的同一类实例
- C 通过数组访问多个成员
- c++ /SQLite -数据库访问与多进程