Russian Qt Forum
Ноябрь 23, 2024, 07:53
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
одновременное обновление активных элементов на центральном виджете приводит к ош
Страниц:
1
[
2
]
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: одновременное обновление активных элементов на центральном виджете приводит к ош (Прочитано 26009 раз)
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #15 :
Июль 17, 2012, 16:55 »
Проще выражаясь - ошибку вы локализовали. Она у вас в той части, ез которой работает усё ок.
Дебаггер в руки и вперед!
PS ну или выкладывайте код.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #16 :
Июль 17, 2012, 18:30 »
Цитата: iceBear от Июль 17, 2012, 16:05
вот еще вопрос в эту же тему - есть ли в QT событие OnIdle () или его аналог?
QTimer с интервалом ноль.
Цитата: Bepec от Июль 17, 2012, 15:42
Человеческий глаз не заметит мельканий раз в 5мс и прочего. Излишняя только работа.
Глаз и фотоны ловит, так что мелькание заметит. Другое дело что исходить надо из соображений плавности для чего 25 fps вполне гуд
Записан
DmitryM
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #17 :
Июль 17, 2012, 20:13 »
Цитата: Igors от Июль 17, 2012, 18:30
Цитата: iceBear от Июль 17, 2012, 16:05
вот еще вопрос в эту же тему - есть ли в QT событие OnIdle () или его аналог?
QTimer с интервалом ноль.
лучше такое не делать
Записан
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #18 :
Июль 17, 2012, 20:27 »
Qtimer с интервалом в 0 напрямую вызывает функцию, минуя таймер и прочая, так что ничего плохого не случится.
PS Тролли фигней не особо страдали
Записан
mutineer
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #19 :
Июль 17, 2012, 20:27 »
Цитата: DmitryM от Июль 17, 2012, 20:13
Цитата: Igors от Июль 17, 2012, 18:30
Цитата: iceBear от Июль 17, 2012, 16:05
вот еще вопрос в эту же тему - есть ли в QT событие OnIdle () или его аналог?
QTimer с интервалом ноль.
лучше такое не делать
А можно аргументации? Интересно почему лучше такое не делать
Записан
DmitryM
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #20 :
Июль 19, 2012, 12:56 »
Цитата: Bepec от Июль 17, 2012, 20:27
Qtimer с интервалом в 0 напрямую вызывает функцию, минуя таймер и прочая, так что ничего плохого не случится.
PS Тролли фигней не особо страдали
Да?
А это что:
Цитировать
The default value for this property is 0. A QTimer with a timeout interval of 0 will time out as soon as all the events in the window system's event queue have been processed.
Записан
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #21 :
Июль 19, 2012, 13:29 »
Это означает, что вызов функции будет добавлен в конец очереди сообщений окна. Проще выражаясь -
прямой вызов функции
.(правильный ответ в первом предложении)
«
Последнее редактирование: Июль 19, 2012, 14:48 от Bepec
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #22 :
Июль 19, 2012, 14:17 »
Цитата: Bepec от Июль 19, 2012, 13:29
Это означает, что вызов функции будет добавлен в конец очереди сообщений окна. Проще выражаясь - прямой вызов функции.
Прочитав этот пост я было подумал - ну щас ему дадут! "Не прочитал документацию!!!" и все такое.. Однако же - повешенная лапша успешно проходит
Никаких там "прямых" вызовов нет - это событие генерируемое системой и добавляемое в eventLoop как и остальные (напр мышиные). Ну там "события таймера имеют низший приоритет и.т.п. - песня известная
Ну а почему "лучше этого не делать" я тоже не понял
Записан
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #23 :
Июль 19, 2012, 14:23 »
Igors, скажите пожалуйста, если поставить бесконечный цикл и вызвать напрямую функцию, куда она пойдёт?
Или вы скажете, что EventLoop ничего общего с очередью сообщений не имеет? Прошу, не сдерживайте себя, авось я чегой т полезного узнаю
update: исходнички форева
Цитировать
void QTimer::singleShot(int msec, QObject *receiver, const char *member)
{
if (receiver && member) {
if (msec == 0) {
// special code shortpath for 0-timers
const char* bracketPosition = strchr(member, '(');
if (!bracketPosition || !(member[0] >= '0' && member[0] <= '3')) {
qWarning("QTimer::singleShot: Invalid slot specification");
return;
}
QByteArray methodName(member+1, bracketPosition - 1 - member); // extract method name
QMetaObject::invokeMethod(receiver, methodName.constData(), Qt::QueuedConnection);
return;
}
(void) new QSingleShotTimer(msec, receiver, member);
}
}
«
Последнее редактирование: Июль 19, 2012, 14:35 от Bepec
»
Записан
mutineer
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #24 :
Июль 19, 2012, 14:43 »
Цитата: Bepec от Июль 19, 2012, 14:23
update: исходнички форева
Ну да, постит сообщение в EventLoop. А под "прямой вызов" большинство программистов небезосновательно понимают вызов метода прям отсюда. Вызов при помощи сообщения в EventLoop это несколько другое же
Записан
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #25 :
Июль 19, 2012, 14:46 »
Ну таки да, погорячился с прямым вызовом, но ранее ответил правильно - ставит в очередь
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #26 :
Июль 19, 2012, 14:56 »
Вот стек вызовов (аттач). Ясно видно что "ноги растут" от ОС (СFRun..), приложение получило событие от него. Причем здесь какой-то "прямой вызов"?
Записан
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #27 :
Июль 19, 2012, 15:09 »
Igors, да я немного оговорился про прямой вызов(сгоряча, не спорю
). В очередь сообщений ставит.
Смотри выше исходники.
Мб у вас система такая или я чего-то недопонимаю, но timeout'a при нулевом интервале у вас быть не должно. На винде 7 x64 во всяком случае, идёт обычный QMetaObject::invokeMethod.
Аналогично вызову слота с QueuedConnection.
«
Последнее редактирование: Июль 19, 2012, 15:13 от Bepec
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #28 :
Июль 19, 2012, 15:27 »
Цитата: Bepec от Июль 19, 2012, 15:09
Мб у вас система такая или я чего-то недопонимаю, но timeout'a при нулевом интервале у вас быть не должно. На винде 7 x64 во всяком случае, идёт обычный QMetaObject::invokeMethod.
Должен быть, ведь идея в том что приложение получает idle когда нет др событий - значит хоть раз ОС должен "прокачать" события. Просто ставите break в слоте таймера и смотрите стек. А invokeMethod может иметь место, но только после того как событие получено от ОС. То уже личное дело Qt как распорядиться полученным
Записан
Bepec
Гость
Re: одновременное обновление активных элементов на центральном виджете приводит к ош
«
Ответ #29 :
Июль 19, 2012, 15:30 »
Igors, повторюсь. Вы видимо не смотрели код.
Когда задаётся таймер с 0(нулевым) интервалом, идёт вызов QMetaObject::invokeMethod.
Сигнал timeOut в данном случае не вызывается. Проверил только что на своей машине.
Если интервал более 0, то ставится обычный виндовый таймер.
Записан
Страниц:
1
[
2
]
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...