Запуск функции в другом потоке в QT - PullRequest
5 голосов
/ 22 декабря 2010

В коде приложения Qt Class A имеет один метод-член, такой как method1().Я хочу вызвать этот метод в другой функции-члене method2() и запустить mehtod1() в другом потоке.Но то, что я нашел из документации qt, выглядит следующим образом.

  1. Наследовать новый class MyThread (предположим) из QThread.
  2. Переопределить метод функции run() требуемымcode.
  3. Создайте объект MyThread в Class A и затем вызовите функцию run в любом месте.

Но вышеприведенное выглядит немного сложным.Есть ли какой-либо механизм в Qt, чтобы я мог мгновенно создать новый QThread (без наследования) в моем method1() и запустить method2() с этим потоком, а затем вернуться к method1() после завершения выполнения?

Пожалуйста, дайте мне знать, если я не ясен в моем вопросе.

Ответы [ 2 ]

10 голосов
/ 22 декабря 2010

Да, есть способ, который вам нужен.

Эта статья поможет вам понять, почему это неправильный способ наследования от QThread: http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/

Эта статья поможет вамчтобы узнать, как использовать QThread очень просто: http://blog.qt.digia.com/blog/2006/12/04/threading-without-the-headache/

3 голосов
/ 22 декабря 2010

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

По сути, слоты QObject, вызываемые через механизм сигнал / слот, выполняются в потоке, который создал QObject. Вы также можете переместить владение объектом из одного потока в другой, используя QObject :: moveToThread.

Вы также можете использовать QCoreApplication :: postEvent, чтобы публиковать события для выполнения в потоке, в котором был создан объект.

Смотрите больше о потоках и объектах QObject в документации Qt (тема "Threads and QObjects" в индексе).

Переходя к вашей проблеме, вы можете использовать два отдельных объекта в разных потоках, чтобы "распределить" выполнение.

...