void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
sqlite3_progress_handler(D,N,X,P) 接口会定期在对 sqlite3_step() 和 sqlite3_prepare() 的长时间运行调用以及数据库连接 D 的类似调用期间调用回调函数 X。此接口的一个示例用途是在大型查询期间保持 GUI 更新。
参数 P 作为回调函数 X 的唯一参数传递。参数 N 是在连续调用回调 X 之间评估的 虚拟机指令 的近似数量。如果 N 小于 1,则进度处理程序将被禁用。
每个 数据库连接 只能定义一个进度处理程序;设置新的进度处理程序会取消旧的进度处理程序。将参数 X 设置为 NULL 将禁用进度处理程序。将 N 设置为小于 1 的值也会禁用进度处理程序。
如果进度回调返回非零值,则操作将被中断。此功能可用于在 GUI 进度对话框上实现“取消”按钮。
进度处理程序回调不得执行任何会修改调用进度处理程序的数据库连接的操作。请注意,sqlite3_prepare_v2() 和 sqlite3_step() 都修改了其数据库连接,以了解本段中“修改”的含义。
进度处理程序回调最初仅从字节码引擎调用。它仍然可能在 sqlite3_prepare() 等期间调用,因为这些例程可能强制重新解析架构,这涉及运行字节码引擎。但是,从 SQLite 版本 3.41.0 开始,进度处理程序回调也可能直接从 sqlite3_prepare() 调用,同时分析和生成复杂查询的代码。