From 8676e5056f639c42256b0051d81286ee67af1d77 Mon Sep 17 00:00:00 2001 From: n0n4m3 Date: Sun, 7 Feb 2010 08:22:31 +0300 Subject: Implement async class for database operations for better performance, remove 10ms sleep, fixed some crash on sql execute. --HG-- branch : trunk --- src/shared/Database/SqlDelayThread.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/shared/Database/SqlDelayThread.cpp') diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index 5b1c1a84b06..6efc9717345 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -32,15 +32,16 @@ void SqlDelayThread::run() mysql_thread_init(); #endif + // Lets wait for next async task no more than 2 secs + ACE_Time_Value _time(2); while (m_running) { // if the running state gets turned off while sleeping // empty the queue before exiting - ACE_Based::Thread::Sleep(10); - SqlOperation* s; - while (m_sqlQueue.next(s)) + SqlAsyncTask * s = (SqlAsyncTask*)m_sqlQueue.dequeue(/*&_time*/); + if(s) { - s->Execute(m_dbEngine); + s->call(); delete s; } } @@ -53,5 +54,11 @@ void SqlDelayThread::run() void SqlDelayThread::Stop() { m_running = false; + m_sqlQueue.queue()->deactivate(); } +bool SqlDelayThread::Delay(SqlOperation* sql) +{ + int res = m_sqlQueue.enqueue(new SqlAsyncTask(m_dbEngine, sql)); + return (res != -1); +} -- cgit v1.2.3