描述
sqlite3_progress_handler(D,N,X,P)功能导致在长时间运行的数据库连接D sqlite3_exec,sqlite3_step和sqlite3_get_table期间定期调用回调函数X.此接口的一个示例使用是在大型查询期间保持GUI更新。
C / C ++语法
void sqlite3_progress_handler( sqlite3*, int, int(*)(void*), void* ); |
PB语法
SUB sqlite3_progress_handler ( _ BYVAL hDbc AS DWORD, _ BYVAL N AS LONG, _ BYVAL pCallBack AS DWORD, _ BYVAL pUserData AS DWORD _ ) |
参数
pDb
[in]数据库连接句柄。必须是从sqlite3_opensqlite3_open16或sqlite3_open_v2获取的sqlite3对象指针。 数据库连接不能关闭。
N
[in]在回调X的连续调用之间评估的虚拟机指令数。
pCallBack
[in]指向回调函数的指针。
回调函数原型:
FUNCTION sqlite3_progress_handler_callback CDECL (BYVAL pUserData AS DWORD) AS LONG
pUserData
[in]作为唯一参数传递给回调函数的数据。
返回值
无返回值。
备注
每个数据库连接只能同时定义一个进度处理程序;设置一个新的进度处理程序取消旧的进度。将参数pCallBack设置为NULL将禁用进度处理程序。进度处理程序也通过将pCallBack设置为小于1的值来禁用。
如果进度回调返回非零,则操作中断。此函数可用于在GUI进度对话框上实现“取消”按钮。
进度处理程序回调函数不能执行任何修改调用进程处理程序的数据库连接。请注意,sqlite3_prepare_v2和sqlite3_step都会修改其数据库连接,以获取本段中“modify”的含义。
C ++实现代码
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
/*
** This function sets the progress callback for an Sqlite database to the
** given callback function with the given argument. The progress callback will
** be invoked every nOps opcodes.
*/
SQLITE_API void sqlite3_progress_handler(
sqlite3 *db,
int nOps,
int (*xProgress)(void*),
void *pArg
){
sqlite3_mutex_enter(db->mutex);
if( nOps>0 ){
db->xProgress = xProgress;
db->nProgressOps = nOps;
db->pProgressArg = pArg;
}else{
db->xProgress = 0;
db->nProgressOps = 0;
db->pProgressArg = 0;
}
sqlite3_mutex_leave(db->mutex);
}
#endif