Здравствуйте, гость ( Вход | Регистрация )
ViGOur | Дата 7.10.2011, 9:10 |
Чтобы было меньше вопросов, предлагаю тебе почитать вот что: 1. Поддержка потоков в Qt 2. Сигналы и слоты Там не так много букв как кажется, и как показывает практика как хотелось бы, и это базовые знания, которые нужно знать каждому, кто работает с Qt и использует потоки. Ну а без сигналов тут разумеется никуда. И если после прочтения у тебя возникнут вопросы, то задавай их, но я думаю они сами по себе отпадут. QtConcurrent, там тоде описан... |
|
gpepsi | Дата 7.10.2011, 9:00 |
ViGOur, а если я создаю поток только для вычитывания и разбора данных. Далее я хочу разобранные данные отдать в GUI для отрисовки. Получается, что в run я должен это все делать, а отдавать данные через сигнал. Если объект создан в главном потоке, то и сигнал будет обработан в главном потоке, что позволит отрисовать их в GUI. Причем processEvents будет не нужен, т.к. QCoreApplication::exec обрабатывает свой цикл событий. Причем в данно случае я могу объекту потоку послать сигнал, который будет обработан в главном потоке. Я правильно размышляю ? Единственное остался вопрос - зачем тогда вообще создавать объекты в run как в примере
если для GUI их все-равно придется отдавать в главный поток, что за нас делает сигнал Кстати, если я не использую потоки, а только сигналы, например, вычитывая данные из сокета вся обработка будет в главном потоке, то приведет к подвисанию GUI если данных очень много P.S. А чем тогда QtConcurrent полезен ? |
|
ViGOur | Дата 7.10.2011, 8:34 |
Цитата то есть самому контролировать выход ? Да, именно так. у тебя же цикл не с вечным sleep'ом, вот и вызывай на каждой его итерации processEvents. А он в свою очередь будет обрабатывать сигналы и вызывать что нужно...Цитата руками вместо exec ? Да. Выше уже описал...Цитата P.S. и кстати как быть с сигналами. Если объект создан в главном потоке, то и сигналы в главном потоке будут обрабатываться, а если объект создан в run ? Запомни, в каком потоке создан объек, в том он и обрабатывается. Если тебя это не устраивает, то после создания объекта ты его можешь передать в другой поток с помощью: void QObject::moveToThread ( QThread * targetThread ) |
|
gpepsi | Дата 7.10.2011, 7:52 |
А если цикл не просто бесконечный, с условием, тогда всё в порядке. то есть самому контролировать выход ? processEvents не сбрасывает ничего, а просто дает отработать сигналам для данного потока. руками вместо exec ? Так всетаки зачем бесконечный цикл то? Мое мнение такое - если бесконечный цикл - то наследоваться от QThread нафиг не нужно - делаем обычный QtConcurrent а чем он лучше и как решит это мою проблему ? P.S. и кстати как быть с сигналами. Если объект создан в главном потоке, то и сигналы в главном потоке будут обрабатываться, а если объект создан в run ? |
|
ViGOur | Дата 6.10.2011, 19:17 |
processEvents не сбрасывает ничего, а просто дает отработать сигналам для данного потока. А если цикл не просто бесконечный, с условием, тогда всё в порядке. |
|
silver47 | Дата 6.10.2011, 19:12 |
Так всетаки зачем бесконечный цикл то? Мое мнение такое - если бесконечный цикл - то наследоваться от QThread нафиг не нужно - делаем обычный QtConcurrent | |
gpepsi | Дата 6.10.2011, 18:45 |
Посмотри на: QCoreApplication::processEvents, он как раз делает то, что тебе нужно... бесконечный цикл он все-равно не сбросит, так что без флага не обойтись |
|
silver47 | Дата 6.10.2011, 17:40 |
Цитата
Зачем это? Что Вы делаете в цикле то? |
|
ViGOur | Дата 6.10.2011, 17:18 |
Посмотри на: QCoreApplication::processEvents, он как раз делает то, что тебе нужно... | |
gpepsi | Дата 6.10.2011, 17:08 |
А ты попробуй. а что тут пробовать
код
без цикла обработки quit не прокатывает |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 14:23 |