diff options
author | raczman <none@none> | 2009-06-25 15:56:45 +0200 |
---|---|---|
committer | raczman <none@none> | 2009-06-25 15:56:45 +0200 |
commit | b8a1ffcf5022477402cea9bfee2b9ddcd830513e (patch) | |
tree | 73ea62ebb1ef231b870eb05f94a594a73e3b9dfc /src/shared/Database/SqlDelayThread.cpp | |
parent | e92f3cf01fb618505f3600a9a291c33b12aa5e63 (diff) |
Implemented separate connection for SqlDelayThread
This should result in less locking when accessing database,
and improved performance.
* Changed SqlDelay queue type to monitored queue,
and removed 10ms check period.
thanks to Derex, mknjc, Jeniczek and Christyan for ideas and tests.
--HG--
branch : trunk
Diffstat (limited to 'src/shared/Database/SqlDelayThread.cpp')
-rw-r--r-- | src/shared/Database/SqlDelayThread.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index 16d5146fc53..612cf55121b 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -22,8 +22,12 @@ #include "Database/SqlOperations.h" #include "DatabaseEnv.h" -SqlDelayThread::SqlDelayThread(Database* db) : m_dbEngine(db), m_running(true) +SqlDelayThread::SqlDelayThread(Database* db, const char* infoString) :m_running(true) { + + m_dbEngine = new DatabaseType; + ((DatabaseType*)m_dbEngine)->Initialize(infoString, false); + } void SqlDelayThread::run() @@ -35,15 +39,17 @@ void SqlDelayThread::run() while (m_running) { - // if the running state gets turned off while sleeping - // empty the queue before exiting - ZThread::Thread::sleep(10); - while (!m_sqlQueue.empty()) - { - s = m_sqlQueue.next(); - s->Execute(m_dbEngine); - delete s; - } + try + { + s = m_sqlQueue.next(); + } + catch(...) + {continue;} + if(!s) + continue; + s->Execute(m_dbEngine); + delete s; + } #ifndef DO_POSTGRESQL @@ -54,5 +60,6 @@ void SqlDelayThread::run() void SqlDelayThread::Stop() { m_running = false; + m_sqlQueue.cancel(); } |