Здравствуйте, гость ( Вход | Регистрация )
franza | Дата 10.1.2011, 19:24 |
спасибо, вроде разобрался. напишу еще, если появятся вопросы. | |
Litkevich Yuriy | Дата 10.1.2011, 19:13 |
я имею ввиду, что этот отдельный поток, где создаются виджеты и есть главный. лучше главный поток и называть главным, чтобы никого столку не сбивать.3 виджета (лсд, кнопка, и базовый, куда они помещаются) создаются в main.cpp. При этом они создаются в главном потоке или нет? Да. Всё что не является наследником QThread и не использует moveToThread() находится в главном потоке.Всё что не является наследником QThread если быть более точным, то - сам наследник QThread создаётся в главном потоке, а затем вызывается его метод start(), который, в свою очередь, вызывает метод run(). Дак вот именно метод run() и выполняется в отдельном потоке, и как следствие, все объекты созданные в методе run() находятся в отдельном потоке.Слоты, к которым происходит коннект вызываются в главном потоке или нет? Слоты находятся в том потоке, в котором находится их объект. Если у тебя все виджеты в главном потоке, то и их слоты соответственно тоже в главном потоке, но это справедливо для соединений типа "авто" (по умолчанию) и "в очередь"(queued).А здесь я не уверен насчет сигналов до exec() в потоке. Собственноручно посылать сигнал можно, а вот, например, сигнал от таймера (созданного здесь же) уже посылаться не будет, т.к. локальная очередь событий не запущена и в таймере не произойдёт события "таймаут"Ну а вообще: ... виджеты живут в основном потоке, но если они получают неприрывный поток сигналов, они это отрабатывают и не дают возможности сигналам и событиям перемещения прийти. +100 |
|
franza | Дата 10.1.2011, 18:28 |
Litkevich Yuriy, понимаю. Можешь попробовать рассказать о моей ошибке не в одном предложении, а подробнее, так как видно, что я мало понимаю. Мне непонятно следующее: 3 виджета (лсд, кнопка, и базовый, куда они помещаются) создаются в main.cpp. При этом они создаются в главном потоке или нет? Если нет, то как создать их в главном потоке? Слоты, к которым происходит коннект вызываются в главном потоке или нет? | |
Litkevich Yuriy | Дата 10.1.2011, 17:35 |
franza, ту по-русски вообще понимаешь? | |
franza | Дата 10.1.2011, 16:47 |
ufna, можно поподробней? Litkevich Yuriy, я имею ввиду, что этот отдельный поток, где создаются виджеты и есть главный. |
|
ufna | Дата 10.1.2011, 2:15 |
Вообще по-хорошему не так делается Можно сделать класс "посылатель сигналов" и пихать его в поток, при этом не переопределяя поток, а делая moveToThread - это будет более правильно. А здесь я не уверен насчет сигналов до exec() в потоке. |
|
franza | Дата 10.1.2011, 0:23 |
ufna, то есть, в принципе, написано все правильно, только надо usleep(100500) написать? | |
ufna | Дата 9.1.2011, 23:59 |
Чет мне подсказывает, что закидывать в while() сообщениями без пауз - это не лучший метод виджеты живут в основном потоке, но если они получают неприрывный поток сигналов, они это отрабатывают и не дают возможности сигналам и событиям перемещения прийти. | |
Litkevich Yuriy | Дата 9.1.2011, 23:41 |
о при выполнении родительский виджет повисает и не дает себя ни перетаскивать ни закрывать, хотя по идее находится в отдельном потоке. виджеты могут находится только в главном потоке. |
|
franza | Дата 9.1.2011, 22:41 |
виджеты создаются в главном потоке (по крайней мере в main.cpp), в run для каждого потока я написал только отправку сигналов, к которым в main.cpp коннектится соответствующий слот. здесь, думаю, я не ошибся. но при выполнении родительский виджет повисает и не дает себя ни перетаскивать ни закрывать, хотя по идее находится в отдельном потоке. | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 14.1.2025, 0:43 |