我想在一個多線程的C++程序使用SQLite 3.7.5。我已經縮小到一些簡單的代碼行:多線程的SQLite崩潰
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);
我上sqlite3_step所謂的 「緩衝區溢出」 的Visual Studio消息。如果我調試,我會看到崩潰位置在dbghook.c的_CRT_DEBUGGER_HOOK中。
我使用的是多線程靜態VC庫,並且正在與定義編譯:
SQLITE_THREADSAFE=2
THREADSAFE=2
我與sqlite3_threadsafe()驗證。
我可以跟蹤比特到SQLite的3碼,但我希望一些人會發現一個明顯的問題,我的代碼並保存我aggrevation。
引用如果你已經解決了這個問題,請發表與其他解決方案的答覆。 – chacham15
我從來沒有找到問題的真正原因。我想我最終把項目減少到了最低限度,問題就消失了。然後,我逐漸添加了組件,發現我最終會找到觸發問題的組件,但我設法添加了所有組件,而不會出現問題重建。所以這是一個謎... –