crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Помогите разобаться с потоками.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
franza Дата 10.1.2011, 19:24
  спасибо, вроде разобрался. напишу еще, если появятся вопросы.
Litkevich Yuriy Дата 10.1.2011, 19:13
 
Цитата(franza @ 10.1.2011, 18:47) *
я имею ввиду, что этот отдельный поток, где создаются виджеты и есть главный.
лучше главный поток и называть главным, чтобы никого столку не сбивать.
Цитата(franza @ 10.1.2011, 20:28) *
3 виджета (лсд, кнопка, и базовый, куда они помещаются) создаются в main.cpp. При этом они создаются в главном потоке или нет?
Да. Всё что не является наследником QThread и не использует moveToThread() находится в главном потоке.

Цитата(Litkevich Yuriy @ 10.1.2011, 20:45) *
Всё что не является наследником QThread
если быть более точным, то - сам наследник QThread создаётся в главном потоке, а затем вызывается его метод start(), который, в свою очередь, вызывает метод run(). Дак вот именно метод run() и выполняется в отдельном потоке, и как следствие, все объекты созданные в методе run() находятся в отдельном потоке.



Цитата(franza @ 10.1.2011, 20:28) *
Слоты, к которым происходит коннект вызываются в главном потоке или нет?
Слоты находятся в том потоке, в котором находится их объект. Если у тебя все виджеты в главном потоке, то и их слоты соответственно тоже в главном потоке, но это справедливо для соединений типа "авто" (по умолчанию) и "в очередь"(queued).



Цитата(ufna @ 10.1.2011, 4:15) *
А здесь я не уверен насчет сигналов до exec() в потоке.
Собственноручно посылать сигнал можно, а вот, например, сигнал от таймера (созданного здесь же) уже посылаться не будет, т.к. локальная очередь событий не запущена и в таймере не произойдёт события "таймаут"

Ну а вообще:
Цитата(ufna @ 10.1.2011, 1:59) *
... виджеты живут в основном потоке, но если они получают неприрывный поток сигналов, они это отрабатывают и не дают возможности сигналам и событиям перемещения прийти.
+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 @ 10.1.2011, 0:41) *
о при выполнении родительский виджет повисает и не дает себя ни перетаскивать ни закрывать, хотя по идее находится в отдельном потоке.
Цитата(Litkevich Yuriy @ 10.1.2011, 0:02) *
виджеты могут находится только в главном потоке.
franza Дата 9.1.2011, 22:41
  виджеты создаются в главном потоке (по крайней мере в main.cpp), в run для каждого потока я написал только отправку сигналов, к которым в main.cpp коннектится соответствующий слот. здесь, думаю, я не ошибся. но при выполнении родительский виджет повисает и не дает себя ни перетаскивать ни закрывать, хотя по идее находится в отдельном потоке.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 22:55