void DBThread::onStop() { pthread_mutex_lock( &m_Lock ); while ( !m_TaskQueue.empty() ) { IDBRequest * request = m_TaskQueue.front(); m_TaskQueue.pop_front(); doQuery( request ); request->destroy(); } pthread_mutex_unlock( &m_Lock ); // 销毁mysql句柄 mysql_close( m_DBHandler ); }
void DBThread::onExecute() { std::vector<IDBRequest*> tasklist; tasklist.reserve(eMaxFetchTaskCount); pthread_mutex_lock( &m_Lock ); if ( m_TaskQueue.empty() ) { pthread_mutex_unlock( &m_Lock ); // 任务线程空闲 TimeUtils::sleep(eMaxWaitForTaskInterval); return; } while ( !m_TaskQueue.empty() && tasklist.size() < eMaxFetchTaskCount ) { IDBRequest * record = m_TaskQueue.front(); m_TaskQueue.pop_front(); tasklist.push_back( record ); } pthread_mutex_unlock( &m_Lock ); // 回调逻辑层 std::vector<IDBRequest *>::iterator it; for ( it = tasklist.begin();it != tasklist.end(); ++it ) { IDBRequest * request = (IDBRequest *)it; doQuery( record ); request->destroy(); } return; }