Russian Qt Forum
Ноябрь 26, 2024, 22:58
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Пауза (задержка) на QT 4.1.0
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Пауза (задержка) на QT 4.1.0 (Прочитано 41818 раз)
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #15 :
Март 01, 2011, 18:09 »
Цитировать
иначе слипнется тред вызывающего, неужели неясно
Именно это и нужно.
Хотя, конечно, ясно почему: тролли хотят чтобы все писали на кьют асинхронные аппликухи, поэтому просто нагнули. Но могли бы и предоставить публично методы sleep.
Записан
Гугль в помощь
Akon
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #16 :
Март 01, 2011, 20:02 »
Тоже не поддерживаю закрытость sleep(). Вполне было бы типично
QThread::currentThread()::sleep(n);
Пабликом Морозовым вытягиваем sleep-ы, как показал navrocky, и получаем кроссплатформенную функцию.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #17 :
Март 01, 2011, 20:12 »
если вам надо паузить мейн тред, то у вас руки из ж. гуй у вас как работать будет?
Записан
erinyes
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #18 :
Март 01, 2011, 20:23 »
Цитата: Авварон от Март 01, 2011, 20:12
если вам надо паузить мейн тред, то у вас руки из ж. гуй у вас как работать будет?
Да никто про мейн не говорит. Я же задачу более менее подробно описал. Если есть более правильное решение - я буду рад услышать, поскольку как применять цикл обработки сообщений внутри потока пока не совсем въехал.
И, кстати, я не совсем понял почему не работает QThread::сurrentThread()->wait(msec); Предположение я высказал про не вызов в потоке exec(), оно правильное? В документации я такого не видел вроде. Написано - либо выход из run() и true, либо таймаут и false. Про необходимость exec'а не сказано.
Записан
BRE
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #19 :
Март 01, 2011, 20:29 »
Цитата: erinyes от Март 01, 2011, 11:00
Может быть помог бы sleep(), но он protected.
Ну и что что он protected?
Ты наследуешь свой поток от QThread и можешь спокойно пользоваться protected-методами.
Т.е. внутри своих потоков - пользуйся sleep, внутри главного - нет. Ну это и правильно (кстати тему эту уже столько раз мусолили...)
Записан
erinyes
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #20 :
Март 01, 2011, 21:06 »
Цитата: BRE от Март 01, 2011, 20:29
Ты наследуешь свой поток от QThread и можешь спокойно пользоваться protected-методами.
Т.е. внутри своих потоков - пользуйся sleep, внутри главного - нет. Ну это и правильно (кстати тему эту уже столько раз мусолили...)
У меня не совсем так. Внутри потока, создается объекта класса интерпретатор, который должен уметь делать паузу в выполнении кода. Он про потоки ничего вроде как не знает (ну или самый минимум).
В целом, меня полностью устроило решение Пантер'а.
«
Последнее редактирование: Март 01, 2011, 21:14 от erinyes
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #21 :
Март 01, 2011, 21:10 »
Цитата: Пантер от Март 01, 2011, 13:28
Код
C++ (Qt)
#define private public
Во. и так можно! И это, значит, "не хак"? То есть по книжке одно (концептуальность, чистота рядов и.т.п.) - а по жизни совсем другое?
«
Последнее редактирование: Март 01, 2011, 22:00 от Пантер
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #22 :
Март 01, 2011, 22:00 »
Это грязный хак - нарушение инкапсуляции, которая есть основа ООП.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #23 :
Март 01, 2011, 22:15 »
Цитата: erinyes от Март 01, 2011, 21:06
У меня не совсем так. Внутри потока, создается объекта класса интерпретатор, который должен уметь делать паузу в выполнении кода. Он про потоки ничего вроде как не знает (ну или самый минимум).
Ну пусть тогда интерпретатор даст знать потоку когда ему уснуть. Зачем городить всякого рода костыли типа
Цитировать
#define private public
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #24 :
Март 01, 2011, 22:32 »
Рано или поздно выяснится что нужна "нормальная синхронизация", а не "пауза" (затычка для отладки)
Записан
erinyes
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #25 :
Март 01, 2011, 22:47 »
Цитата: pastor от Март 01, 2011, 22:15
...
Ну пусть тогда интерпретатор даст знать потоку когда ему уснуть. Зачем городить всякого рода костыли типа
Да, это вариант, но я не наследовал интерпретатор от QObject. Возможно, я не прав, но я посчитал, что это лишнее, так что сигналов и слотов мой класс не имеет.
Цитировать
#define private public
Я не делал и делать не собираюсь - это жестокий изврат. И лезть к protected методам не собираюсь. Меня вполне удовлетворило решение на API для двух операционок. Хотя я надеялся, что есть простой вариант с помощью Qt средств. Вероятно, можно и нужно лучше использовать поток, чем просто перегружать run().
Цитата: Igors от Март 01, 2011, 22:32
Рано или поздно выяснится что нужна "нормальная синхронизация", а не "пауза" (затычка для отладки)
Igors, это не для синхронизации нужно - либо ты невнимательно читал, либо я плохо объясняю(понимаю). В любом случае, мне интересны предложения как лучше подобную вещь организовывать.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #26 :
Март 01, 2011, 23:10 »
Цитата: erinyes от Март 01, 2011, 22:47
Igors, это не для синхронизации нужно - либо ты невнимательно читал, либо я плохо объясняю(понимаю). В любом случае, мне интересны предложения как лучше подобную вещь организовывать.
А нужна ли та вещь чтобы ее организовывать? Ладно, пусть скорость в Вашей задаче не нужна - можно прождать неск. секунд (вагон времени, хотя данные могут уже быть давно готовы). А что остальные нитки - тоже ждут или как? Это приемлемо если напр. какая-то нитка занята только высасыванием данных из сокета (и то не всегда)
Записан
erinyes
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #27 :
Март 01, 2011, 23:45 »
Цитата: Igors от Март 01, 2011, 23:10
... Ладно, пусть скорость в Вашей задаче не нужна - можно прождать неск. секунд (вагон времени, хотя данные могут уже быть давно готовы)....
Данные или синхронизация тут
вообще
не причем, просто нужна пауза до интерпретации следующего кода.
«
Последнее редактирование: Март 01, 2011, 23:49 от erinyes
»
Записан
Akon
Гость
Re: Пауза (задержка) на QT 4.1.0
«
Ответ #28 :
Март 02, 2011, 09:38 »
Цитировать
И, кстати, я не совсем понял почему не работает QThread::сurrentThread()->wait(msec);
Данная функция предназначена для синхронизации, а не для задержки. Она вызывается из другого потока, а не из данного.
Когда поток заканчивает выполнение, т.е. происходит выход из run() (более точно - заканчивает выполнение системная функция потока), то освобождается соответствующий объект ядра операционной системы - на него и реагирует wait(). Как частный случай, если в потоке крутится цикл обработки сообщений, то он прерывается по exec() и далее происходит выход из run().
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...