Пример #1
0
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 );
}
Пример #2
0
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;
}