Установить тайм-аут Setlk
int sqlite3_setlk_timeout(sqlite3*, int ms, int flags);
Эта процедура полезна только при сборках с SQLITE_ENABLE_SETLK_TIMEOUT. Если VFS поддерживает блокирующие блокировки, она устанавливает тайм-аут в мс, используемый для разрешённых блокировок, устанавливаемых указанным дескриптором базы данных в базах данных в режиме WAL. В сборках без SQLITE_ENABLE_SETLK_TIMEOUT или если VFS не поддерживает блокирующие блокировки эта функция ничего не делает.
Передача 0 этой функции полностью отключает блокирующие блокировки. Передача -1 этой функции запрашивает, чтобы VFS блокировал выполнение в течение длительного времени — по возможности бесконечно. Результаты передачи любого другого отрицательного значения не определены.
Внутри каждого дескриптора базы данных SQLite хранятся два значения тайм-аута — busy-timeout (используется для баз данных в режиме отката или если VFS не поддерживает блокирующие блокировки) и setlk-timeout (используется для блокирующих блокировок в базах данных в режиме WAL). Метод sqlite3_busy_timeout() устанавливает оба значения, а эта функция устанавливает только значение setlk-timeout. Поэтому, чтобы настроить отдельные значения busy-timeout и setlk-timeout для одного дескриптора базы данных, вызовите sqlite3_busy_timeout(), а затем эту функцию.
Всякий раз, когда число подключений к базе данных в режиме WAL уменьшается с 1 до 0, последнее подключение устанавливает эксклюзивную блокировку базы данных, затем выполняет контрольную точку и удаляет файл WAL. Пока это происходит, любое новое подключение, пытающееся прочитать данные из базы, завершается ошибкой SQLITE_BUSY. Если же этому API передан флаг SQLITE_SETLK_BLOCK_ON_CONNECT, новое подключение блокируется до снятия эксклюзивной блокировки.
См. также списки объектов, констант и функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/setlk_timeout.html