Russian Qt Forum
Декабрь 19, 2018, 05:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отладка очереди слотов  (Прочитано 905 раз)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« : Апрель 10, 2018, 15:08 »

Можно как-то добраться до очереди слотов данного потока/объекта?

Как минимум хотелось бы получить количество вызванных слотов в очереди, как максимум знать каких слотов там сколько (ну или какого слота больше всего).
Записан
qate
Птица говорун
*****
Offline Offline

Сообщений: 910


Просмотр профиля
« Ответ #1 : Апрель 10, 2018, 21:51 »

недавно смотрел https://github.com/KDAB/GammaRay
очень много может рассказать о программе, наверно все что происходит внутри qt
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10281


Просмотр профиля
« Ответ #2 : Апрель 11, 2018, 09:25 »

Что за "вызванных"? Если они уже вызваны, то в очереди их не будет. Если речь просто об очереди событий, то может стоит пошшупать QThreadData::posEventList (qthread_p.h)
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Апрель 12, 2018, 12:22 »

Igors, да, под вызванными подразумевались слоты стоящие в очереди, то есть сигнал уже вызван, а слот ещё не отработал.

Код:
    QThreadData* data = QThreadData::get2( currentThread() );
    QVector<QPostEvent> evs = data->postEventList;
    foreach ( QPostEvent ev, evs )
    {
        if ( ev.event->type() == QEvent::MetaCall )
        {
            QMetaCallEvent* mev = static_cast<QMetaCallEvent*>( ev.event );
            QMetaMethod signal = mev->sender()->metaObject()->method(mev->signalId());
            qDebug() << "Metacall:" << ev.receiver << mev->sender() << signal.methodSignature();
        }
    }

В целом вроде то, что надо, только почему-то signal.methodSignature() выдаёт неправильные данные (явно другой сигнал)…
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10281


Просмотр профиля
« Ответ #4 : Апрель 12, 2018, 15:47 »

Возможно стоит считаться с тем что очередь может измениться в течение ее просмотра (там мутекс есть)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.114 секунд. Запросов: 22.