Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.143.207] |
|
Страницы: (6) [1] 2 3 ... 5 6 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
попытался создать диалог, который при создании создает таймер и обновляет иконку.
Тоесть я хочу его запускать при длительных операциях для отображения окна действия пользователя. QDialog dialog; dialog.show(); ... // долгие расчеты, возможно в разных потоках и с синхронизацией Sleep (10000); // эмуляция ... dialog.hide(); Но таймер не срабатывает. Было предположение, что таймер работает в контексте GUI-потока. Попытался вместо таймера использовать поток. Кричит, что нельзя изменять компанент созданный в GUI-потоке из другого потока. Создал этот диалог вообще в отдельном потоке - таже фигня. Как создать такой диалог ? Добавлено P.S. Вся проблемма в том, что нужен именно диалог в отдельном поке, а не обработка данных. Т.к. при обработке данных обновляются компаненты, созданные в GUI-потоке. |
Сообщ.
#2
,
|
|
|
Цитата zss @ Создал этот диалог вообще в отдельном потоке - таже фигня. Ты в отдельном потоке метод exec, который проталкивает очередь сообщений, вызываешь? |
Сообщ.
#3
,
|
|
|
Цитата Flex Ferrum @ Ты в отдельном потоке метод exec, который проталкивает очередь сообщений, вызываешь? так exec для диалога это синхронный вызов окна (на сколько я понял) |
Сообщ.
#4
,
|
|
|
Цитата zss @ так exec для диалога это синхронный вызов окна (на сколько я понял) Да нет. У самого потока есть метод exec. |
Сообщ.
#5
,
|
|
|
Цитата Flex Ferrum @ Да нет. У самого потока есть метод exec. я не использую Qt-потоки я использую boost... |
Сообщ.
#6
,
|
|
|
Цитата zss @ я не использую Qt-потоки я использую boost... Хех. Ну тогда ищи класс QEventLoop, и дергай у его экземпляра, созданного в потоке, метод processEvents. |
Сообщ.
#7
,
|
|
|
Цитата Flex Ferrum @ Хех. Ну тогда ищи класс QEventLoop, и дергай у его экземпляра, созданного в потоке, метод processEvents. а можно ли все-таки создать поток в самом диалоге, чтою не плодить потоки из первичного потока ? |
Сообщ.
#8
,
|
|
|
Цитата zss @ а можно ли все-таки создать поток в самом диалоге, чтою не плодить потоки из первичного потока ? Если только ты во время твоих длительных вычислений будешь руками толкать сообщения. |
Сообщ.
#9
,
|
|
|
Цитата Flex Ferrum @ Если только ты во время твоих длительных вычислений будешь руками толкать сообщения. не получится - дергаеются методы библиотек, которые не возвращают управления до завершения |
Сообщ.
#10
,
|
|
|
Цитата zss @ не получится - дергаеются методы библиотек, которые не возвращают управления до завершения Тогда, если эти библиотеки не просят callback'и, только в отдельном потоке. И, кстати, элементы основного потока у тебя (при таком раскладе) врядли будут перерисовываться. |
Сообщ.
#11
,
|
|
|
Цитата Flex Ferrum @ И, кстати, элементы основного потока у тебя (при таком раскладе) врядли будут перерисовываться. при каком ? Если создаю в отдельном потоке ? З.Ы. Ну принципе элементы основного потока и не так выжны... |
Сообщ.
#12
,
|
|
|
Цитата zss @ при каком ? Если создаю в отдельном потоке ? При любом. |
Сообщ.
#13
,
|
|
|
Цитата Flex Ferrum @ При любом. ну так и при показе обычного диалога этого не происходит. Это же никому не мешает |
Сообщ.
#14
,
|
|
|
zss
я так понял, что хочешь создать диалог в не gui-потоке? или диалог создается в gui-потоке и отображается во время длительных операций в другом, не gui-потоке? Т.е. пользователь может сделать что-то с программой, пока в параллельном потоке что-то выполняется? для чего таймер? |
Сообщ.
#15
,
|
|
|
Цитата gryz @ для чего таймер? таймер у меня в диалоге для смены картинки. Но ни разу не срабатывает. Кроме того сам диалог не перетаскивается. Он не реагирует на действия пользователя вообще. Цитата gryz @ я так понял, что хочешь создать диалог в не gui-потоке? да нет. хочу как раз в GUI-потоке. но после того как dialog.show(); Sleep (10000); на Sleep замирает весь GUI и диалог не отрисовывается. Flex Ferrum, я попробовал создать QThread и вызывать exec. Не дает он создавать Widget в не GUI-потоке. Или я чего-то не понял ? void fmMain::start (void) { m_stopped = false; QThread::start (); } void fmMain::stop (void) { m_stopped = true; QThread::wait (); } void Console::run (void) { QWaitDialog dialog ("Running..."); while (!m_stopped) { QThread::exec(); QThread::msleep (100); } } void fmMain::func () { start (); Sleep (5000); stop (); } |