LINUX.ORG.RU

[Qt]помогите разобратся с потоками

 


0

0

Долго пытался найти что-нибудь толковое в манах или в интернете, но так и не смог.
Собственно вопрос прост: каким образом реализуется прием/отправка сообщений в Qt с точки зрения потоков. Все реализованно в одном потоке через очередь сообщений? А если класс унаследован от QThread, его приемка и отправка сообщений обрабатывается в каком потоке? А если он запущен/не запущен?
Вот такие вопросы роятся у меня в голове.
Буду благодарен даже за ссылку на информацию об этом обо всем.
Можно на eng.

Всем заранее спасибо.

★★★★★

> Все реализованно в одном потоке через очередь сообщений?

Да

> А если класс унаследован от QThread

Each QThread can have its own event loop. You can start the event loop by calling exec(); (см. документацию QThread)

> А если он запущен/не запущен?

Если поток не запущен - его нет

anonymous
()

У каждого потока есть свой event loop, "отдаться" которому можно вызвав QThread::exec() - это же действие делает дефолтовая реализация QThread::run()

Для того, чтобы явно указать в каком event loop'e должны вариться события того или иного объекта, нужно вызвать у этого объекта QObject::moveToThread(). По умолчанию используется event loop потока, в котором был создан объект.

mannaz
()

Как указали выше, в каком потоке создан объект, то в таком потоке и обрабатываются сообщения.

Но также не следует забывать, что сам экземпляр QThread создается в другом потоке (http://vingrad.ru/blogs/sabrog/2009/06/11/qt-45-movetothread-ili-metod-myunhg...).

Также последним аргументом в connect(); можно указать как связывать объекты из разных потоков (http://doc.trolltech.com/4.5/qt.html#ConnectionType-enum).

Kristi
()
Ответ на: комментарий от Kristi

> Но также не следует забывать, что сам экземпляр QThread создается в другом потоке

Кстати, да - очень полезное замечание.

mannaz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.