Qt - рабочий поток замораживает пользовательский интерфейс - PullRequest
0 голосов
/ 02 июля 2011

Это мой первый опыт работы с потоками в Qt, так что терпите меня.

У меня есть одноэлементный "системный" объект, который периодически выполняет тяжелый кусок кода.Я управляю системным синглтоном из своего пользовательского интерфейса, но система не знает о пользовательском интерфейсе.

Я создаю поток в главном, а затем перемещаю систему в него:

QThread systemThread;

System::instance()->moveToThread(&systemThread);

systemThread.start();
qApp.exec();

Пользовательский интерфейс зависает до завершения периодического цикла обработки системы.

Я также пытался создать подкласс QThread и вызывать exec из метода run .

В чем может быть проблема?Я, конечно, что-то не так делаю.

С наилучшими пожеланиями

Ответы [ 3 ]

2 голосов
/ 04 июля 2011

Смотрите отличную статью о Потоках, Событиях и QObjects в вики Qt для разработчиков.Что-то не так с сродством потока, вы можете проверить это с помощью QObject :: thread ().

1 голос
/ 08 июля 2011

Я советую вам следовать этому руководству самого разработчика Qt при реализации многопоточности: http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/

Это намного эффективнее и безболезненнее.

0 голосов
/ 02 июля 2011

systemThread.start() запустит метод systemThread.run() в потоке, поэтому вам нужно реализовать его внутри run().

Для создания собственных потоков подкласс QThread и переопределение run().

...