Я пытаюсь использовать SQLite 3.7.5 в многопоточной программе на C ++.Я сузил его до нескольких простых строк кода:
sqlite3 *Database;
sqlite3_stmt *Stmt;
int retval=sqlite3_open("database.db3",&Database);
retVal=sqlite3_prepare(&Database,"CREATE TABLE RawData (Key CHAR(5))",-1,&Stmt,0);
retval=sqlite3_step(Stmt);
retval=sqlite3_finalize(Stmt);
Когда я вызываю этот код прямо из моего основного процесса, он отлично работает.Однако, если я использую CreateThread () для создания потока:
unsigned long ThreadId;
CreateThread(0,0,(LPTHREAD_START_ROUTINE) InserterThread,&Info,0,&ThreadId);
, я получаю сообщение «переполнение буфера» Visual Studio при вызове sqlite3_step .Если я отлаживаю, я вижу, что место сбоя находится в _CRT_DEBUGGER_HOOK в dbghook.c.
Я использую многопоточные библиотеки Static VC и компилирую с определениями:
SQLITE_THREADSAFE=2
THREADSAFE=2
Я подтвердил с помощью sqlite3_threadsafe () .
Я могу немного проследить код SQLite 3, но я надеюсь, что кто-нибудь обнаружит очевидную проблему с моим кодом и спасет меняагрегация.