Exemplo n.º 1
0
void StatusManager::setStatus(const QString& name, Holder holder)
{
    Holder older(status(name));

    if (holder.is_valid() && older.is_valid())
    {
        using namespace ::gsim::core::utils;

        Holder newer(older.clone());

        // Hace una copia 'reflectiva' ya que holder puede no ser
        // del mismo tipo que el tipo del estado.
        reflective_copy(holder, newer);

        // Region protegida reducida al mínimo
        if (applyStatus(name, older, newer))
        {
            unique_lock lock(m_data->messageMutex);

            m_data->status[name] = newer;

            // Ha de estar dentro de la región protegida para la
            // notificación en orden
            emit statusChanged(name, newer); 
            emit statusChanged(name, older, newer); 
        }
    }
}
Exemplo n.º 2
0
Holder StatusManager::status(const QString& name)
{
    Holder res (statusRef(name));

    // Devuelve siempre una copìa
    if (res.is_valid())
    {
        res = Holder(res.clone());
    }

    return res;
}