crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику ssoft ::: Спасибо сказали: 30 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
28.10.2011, 8:13 QMap + QThread
Цитата(AXELman4ever @ 27.10.2011, 19:55) *
А почему я не могу залочить мютекс непосредственно перед вставкой элемента, при этом не создавая обертку?
Разве не тоже самое? Просто за безопасностью придется следить самостоятельно.


Почти тоже самое, просто обертка автоматически разлочит мьютекс при любой причине выхода из пространства её видимости,
даже при исключениях. А здесь нужно самому помнить об этом, а исключение оставит мьютекс заблокированным.

Цитата(AXELman4ever @ 27.10.2011, 19:55) *
UDP: Возьму на Вашем примере, создам экземпляр класса-обертки. Теперь стоит вопрос в том как использовать этот экземпляр между потоками? Внедрить его как поле в класс-синглтон и оперировать им из потоков через указатели?


Можно и синглтоном, а лучще через умный указатель QSharedPointer.

PS. Жмем кнопку спасибо :rolleyes:
AXELman4ever,
27.10.2011, 17:40 QMap + QThread
Например, что-то такое

template< typename _Key, typename _Value >
class MySafeMap
{
    QMutex m_mutex;
    QMap< _Key, _Value > m_map;

public:
    void insert ( const _Key & key, const _Value & value )
    {
        QMutexLocker locker( &m_mutex );
        m_map.insert( key, value );
    }

    _Value value ( const _Key & key ) const
    {
        QMutexLocker locker( &m_mutex );
        m_map.insert( key, value );
    }

    // и т.д. все небходимые методы
}


или

template< typename _Key, typename _Value >
class MySafeMap
{
    QReadWriteLock m_mutex;
    QMap< _Key, _Value > m_map;

public:
    void insert ( const _Key & key, const _Value & value )
    {
        QWriteLocker locker( &m_mutex );
        m_map.insert( key, value );
    }

    _Value value ( const _Key & key ) const
    {
        QReadLocker locker( &m_mutex );
        m_map.insert( key, value );
    }

    // и т.д. все небходимые методы
}

AXELman4ever,
19.9.2011, 9:58 Несколько наследников QGraphicsScene
Бага в том, что используется глобальный массив для GraphicsItem.
GraphicsItem может принадлежать только одной сцене.

Если сделать глобальные переменные членами класса, то все работает замечательно.

RazrFalcon,

2 страниц V  < 1 2
RSS Текстовая версия Сейчас: 20.4.2024, 8:42