Помогите разобаться с потоками. |
Здравствуйте, гость ( Вход | Регистрация )
Помогите разобаться с потоками. |
franza |
9.1.2011, 21:02
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 3.1.2011 Пользователь №: 2323 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я начинающий в Qt. Разбираюсь с многопоточностью и не могу написать код, который одновременно менял значение QLCDNumber и постоянно нажимает кнопочку. Прошу помочь разобраться.
lcdthread.h
pbthread.h
lcdthread.cpp
pbthread.cpp
main.cpp
Не могу сделать так, чтобы родительский виджет был доступен для перетаскиваний и прочего. Или для него надо писать свой поток? |
|
|
Litkevich Yuriy |
9.1.2011, 22:02
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
franza |
9.1.2011, 22:41
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 3.1.2011 Пользователь №: 2323 Спасибо сказали: 0 раз(а) Репутация: 0 |
виджеты создаются в главном потоке (по крайней мере в main.cpp), в run для каждого потока я написал только отправку сигналов, к которым в main.cpp коннектится соответствующий слот. здесь, думаю, я не ошибся. но при выполнении родительский виджет повисает и не дает себя ни перетаскивать ни закрывать, хотя по идее находится в отдельном потоке.
|
|
|
Litkevich Yuriy |
9.1.2011, 23:41
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
ufna |
9.1.2011, 23:59
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
Чет мне подсказывает, что закидывать в while() сообщениями без пауз - это не лучший метод виджеты живут в основном потоке, но если они получают неприрывный поток сигналов, они это отрабатывают и не дают возможности сигналам и событиям перемещения прийти.
|
|
|
franza |
10.1.2011, 0:23
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 3.1.2011 Пользователь №: 2323 Спасибо сказали: 0 раз(а) Репутация: 0 |
ufna, то есть, в принципе, написано все правильно, только надо usleep(100500) написать?
|
|
|
ufna |
10.1.2011, 2:15
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5 |
Вообще по-хорошему не так делается Можно сделать класс "посылатель сигналов" и пихать его в поток, при этом не переопределяя поток, а делая moveToThread - это будет более правильно.
А здесь я не уверен насчет сигналов до exec() в потоке. |
|
|
franza |
10.1.2011, 16:47
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 3.1.2011 Пользователь №: 2323 Спасибо сказали: 0 раз(а) Репутация: 0 |
ufna, можно поподробней?
Litkevich Yuriy, я имею ввиду, что этот отдельный поток, где создаются виджеты и есть главный. |
|
|
Litkevich Yuriy |
10.1.2011, 17:35
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
franza, ту по-русски вообще понимаешь?
|
|
|
franza |
10.1.2011, 18:28
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 3.1.2011 Пользователь №: 2323 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, понимаю. Можешь попробовать рассказать о моей ошибке не в одном предложении, а подробнее, так как видно, что я мало понимаю. Мне непонятно следующее: 3 виджета (лсд, кнопка, и базовый, куда они помещаются) создаются в main.cpp. При этом они создаются в главном потоке или нет? Если нет, то как создать их в главном потоке? Слоты, к которым происходит коннект вызываются в главном потоке или нет?
|
|
|
Текстовая версия | Сейчас: 4.12.2024, 14:44 |