Я просматривал ссылки
- Вы делаете это неправильно
- Использование QThread справа путь Часть 1
- Использование QThread справа путь Часть 2
Меня запутали некоторые утверждения. В первой ссылке написано, что
все функции в QThread были написаны и предназначены для вызова из создающего потока, а не из потока, который запускает QThread.
в то время как он предлагает использовать moveToThread
для перемещения объекта в новый поток вместо создания подкласса QThread
. У меня вопрос:
Реализация метода run
по умолчанию вызывает exec
, который создает цикл событий, и когда привязка потока объекта изменяется с помощью moveToThread
, все slots
будут выполняться в новая цепочка, а не в создаваемой цепочке, что противоречит вышеупомянутому предполагаемому использованию. Я что-то упускаю?
Второй вопрос:
В третьей ссылке сказано
очередь событий принадлежит потоку, а не циклу событий, и она используется всеми циклами событий, запущенными в этом потоке.
У меня вопрос: как может быть более одного цикла событий в одном потоке? Насколько я понимаю, цикл событий проходит через очередь событий, пока не будет вызван _7 _ / _ 8_, и обрабатывает каждый event
, поступающий в эту очередь. Если это правда, один цикл никогда не закончится (если не будет вызван _10 _ / _ 11_), как может начаться другой? Мы будем очень признательны за любой образец кода, демонстрирующий это.
QThread
. Таким образом, в новом потоке не выполняютсяQThread
методы, кромеrun
. - person Kuba hasn't forgotten Monica   schedule 29.05.2014all of the functions in QThread were written and intended to be called from the creating thread, not the thread that QThread starts.
в основном означает, что не делайте этого:moveToThread(this);
. - person thuga   schedule 30.05.2014