Exemplo n.º 1
0
void ConnectionSet::_addConnectionToThread( ConnectionPtr connection )
{
    _needRebalance = true;
    lunchbox::ScopedWrite mutex( _impl->lock );
    if ( _impl->threads.size() > 0 ) 
    {
        Thread* minThread = *( std::min_element(_impl->threads.begin(), 
                               _impl->threads.end(), 
                               ThreadConnectionsSizeComparator()) );
        
        if ( minThread->set._impl->connections.size() < MAX_CONNECTIONS )
            minThread->set.addConnection( connection );    
        else 
        {
            Connections connections(1, connection);
            _createThread( connections );
        }
            
    }
    else 
    {
        _isThreadMode = true;
        size_t mid_connections = _impl->connections.size()/2;
        Connections connections1(_impl->connections.begin(), 
                                 _impl->connections.begin() + mid_connections );
        Connections connections2(_impl->connections.begin() + mid_connections, 
                                 _impl->connections.end() );
        connections1.push_back( connection );
        while( !_impl->connections.empty() ) 
        {
            ConnectionPtr lastConnection = _impl->connections.back();
            lastConnection->removeListener( _impl );
            _impl->connections.pop_back();
        }
        _createThread( connections1 );
        _createThread( connections2 );
    }
}
Exemplo n.º 2
0
void cWorker::checkThreadAlive()
{
	if (!CThread::checkThreadAlive(worker_thread_id)) {
		_createThread();
	}
}
Exemplo n.º 3
0
void cWorker::run()
{
	_createThread();
}