Проблемы с многопотоковым приложением, Работа с второстепенным потоком. |
Здравствуйте, гость ( Вход | Регистрация )
Проблемы с многопотоковым приложением, Работа с второстепенным потоком. |
AD |
4.2.2008, 19:23
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Есть главное приложение, где выполняется отрисовка карты и траектории. А есть второстепенный поток, который читает файлы(логи) для отрисовки траектории. Как правильно передать управление из одной функции в другую? И вообще как правильнее решить этот вопрос. Вот примеры функций.
class LogReader
Могу пояснить вопрос. Как вот в этом месте
Перейти в функцию run()? Сообщение отредактировал Litkevich Yuriy - 28.8.2008, 13:56
Причина редактирования: Добавлен тэг expand
|
|
|
ViGOur |
4.2.2008, 20:06
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Если я тебя правильно понял, то rthread->start();
Но ИМХО лучше не в run передовать, а в какую-нибудь другую функцию данного потока посредством сигналов и слотов. |
|
|
AD |
4.2.2008, 20:15
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Если я тебя правильно понял, то rthread->start(); Но ИМХО лучше не в run передовать, а в какую-нибудь другую функцию данного потока посредством сигналов и слотов. ну да, правильно поняли. Как с помощью сигналов и слотов, если несложно, помогите, пожалуйста!!! Сообщение отредактировал AD22 - 4.2.2008, 20:15 |
|
|
ViGOur |
4.2.2008, 20:32
Сообщение
#4
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Ну с сигналами и слотами все достаточно просто.
Создаем сигнал (threadSignal) и слот (threadSlot) и связываем их:
Разумеется их нужно обьявить в классе с ключевыми словами signals и slots. Для сигнала в moc файле быдет создано определение автоматически, для слота нужно будет писать самому, в принципе слот это обычная функция. Затем, чтобы вызвать сигнал нужно написать:
Еще нужно помнить, что слот threadSlot, будет выполнять в том потоке, в котором был создан pObject. Вот в принципе и все. Для лучшего понимая сигналов и слотов рекомендую прочитать: Сигналы и слоты. |
|
|
AD |
4.2.2008, 20:40
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Ну с сигналами и слотами все достаточно просто. Создаем сигнал (threadSignal) и слот (threadSlot) и связываем их:
Разумеется их нужно обьявить в классе с ключевыми словами signals и slots. Для сигнала в moc файле быдет создано определение автоматически, для слота нужно будет писать самому, в принципе слот это обычная функция. Затем, чтобы вызвать сигнал нужно написать:
Еще нужно помнить, что слот threadSlot, будет выполнять в том потоке, в котором был создан pObject. Вот в принципе и все. Для лучшего понимая сигналов и слотов рекомендую прочитать: Сигналы и слоты. В принципе понятно, но а в каком классе, из приведенных выше, надо сделать connect, а в каких эти threadSlot, threadSignal? Что за pObject? Сообщение отредактировал AD22 - 4.2.2008, 20:41 |
|
|
ViGOur |
4.2.2008, 20:53
Сообщение
#6
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Думаю, что в твоем варианте примерно так:
Ну и вызываешь emit threadSignal(); в том участке коде, что показывал в первом посте...
Сообщение отредактировал ViGOur - 4.2.2008, 20:54 |
|
|
AD |
5.2.2008, 10:02
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Спасибо за помощь!
|
|
|
AD |
5.2.2008, 11:35
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
АААА. Еще не все.
Сделал. Выдает ошибку -
Как избавиться. Нужно ли тело для threadSignal()? |
|
|
ViGOur |
5.2.2008, 11:40
Сообщение
#9
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Определение для сигнала не нужно, оно генерируется автоматически moc'ом.
В какой строчке выдает ошибку? |
|
|
AD |
5.2.2008, 11:46
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
Текстовая версия | Сейчас: 17.1.2025, 14:13 |