предпочтительный способ вызова метода QObject из другого потока и того же потока

#multithreading #qt #slot

#многопоточность #qt #слот

Вопрос:

Я хочу вызвать метод QObject из другого потока (Qt ::QueuedConnection), если мое приложение многопоточное, и из того же потока (Qt :: DirectConnection), если мое приложение работает в одном потоке.

Я обнаружил, что это может быть достигнуто двумя способами: 1) сигнал / слот 2) QMetaObject:: invokeMethod с использованием Qt :: AutoConnection, но я хотел бы знать, какой из них предпочтительнее и есть ли разница в производительности между ними?

  1. Сигнал / слот Qt:: автоматическое подключение:

Способ сигнала / слота

  1. QMetaObject::invokeMethod Qt::Автоматическое подключение:

введите описание изображения здесь

Уже существует существующая кодовая база, которая выполняется с помощью сигнала / слота, но ее довольно сложно прочитать. Стоит ли его рефакторинг с помощью QMetaObject::invokeMethod?

аргументы функции также могут быть настраиваемым типом.

Комментарии:

1. Мне любопытно, почему вы находите сигналы / слоты более сложными для чтения, чем QMetaObject::invokeMethod? Я бы никогда не стал беспокоиться о invokeMethod, если это не является абсолютно необходимым.