Russian Qt Forum
Ноябрь 01, 2024, 04:30
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Трудоемкие задачи (прервать или продолжить). Как прервать?
Страниц: [
1
]
2
3
...
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Трудоемкие задачи (прервать или продолжить). Как прервать? (Прочитано 33416 раз)
daimon
Гость
Трудоемкие задачи (прервать или продолжить). Как прервать?
«
:
Декабрь 06, 2009, 18:11 »
Как на момент выполнения трудоемкой задачи заблокировать сигналы от кнопок, закрытие окна.....?
«
Последнее редактирование: Декабрь 10, 2009, 01:34 от daimon
»
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Блокирование интерфейса
«
Ответ #1 :
Декабрь 06, 2009, 18:33 »
чтобы юзер выяснил, где ты живёшь и нанял килера?
Записан
Юра.
daimon
Гость
Re: Блокирование интерфейса
«
Ответ #2 :
Декабрь 06, 2009, 18:55 »
Цитата: lit-uriy от Декабрь 06, 2009, 18:33
чтобы юзер выяснил, где ты живёшь и нанял килера?
Закроешь окно, а процесс висит- надо это обработать
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Блокирование интерфейса
«
Ответ #3 :
Декабрь 06, 2009, 19:03 »
>>Закроешь окно, а процесс висит
не понял, он что внешний, через QProcess создаётся?
Записан
Юра.
daimon
Гость
Re: Блокирование интерфейса
«
Ответ #4 :
Декабрь 06, 2009, 19:11 »
Цитата: lit-uriy от Декабрь 06, 2009, 19:03
>>Закроешь окно, а процесс висит
не понял, он что внешний, через QProcess создаётся?
Нет процесс приложения (всё намного проще).
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Блокирование интерфейса
«
Ответ #5 :
Декабрь 06, 2009, 19:28 »
А почему висит?
Закрыл окно, приложение не выгрузилось? Может стоит подумать о связи объектов, организовать её так, чтобы все объекты создавалась в конструкторе окна, а не параллельно с ним.
Либо смотреть в сторону свойства quitOnLastWindowClosed
Записан
Юра.
daimon
Гость
Re: Блокирование интерфейса
«
Ответ #6 :
Декабрь 06, 2009, 19:47 »
Цитата: lit-uriy от Декабрь 06, 2009, 19:28
А почему висит?
Закрыл окно, приложение не выгрузилось? Может стоит подумать о связи объектов, организовать её так, чтобы все объекты создавалась в конструкторе окна, а не параллельно с ним.
Либо смотреть в сторону свойства quitOnLastWindowClosed
Задача такая:
поставил на копирование много ячеек таблицы
и закрыл окно - в процессе осталось висеть приложение.
Как обработать операцию (копирование) вывести сообщение про операцию и пердложить продолжить прервать?
Как с другой функции (слота) прервать работу другой функции (которая в процессе)?
«
Последнее редактирование: Декабрь 06, 2009, 19:50 от daimon
»
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Блокирование интерфейса
«
Ответ #7 :
Декабрь 06, 2009, 20:03 »
>>и закрыл окно - в процессе осталось висеть приложение.
имеет смысл свернуть в "системный лоток" (tray)
>>Как обработать операцию (копирование) вывести сообщение про операцию и пердложить продолжить прервать?
когда это сообщение нужно выводить, по какому событию?
>>Как с другой функции (слота) прервать работу другой функции (которая в процессе)?
долгие операции лучше помещать в отдельный поток (смотри QThread), если ты так не сделаешь, то твоё приложение будет мёртвым, пока операция не завершится.
примерно так:
Создаёшь свой объект (наследник QThread), передаёшь в его конструктор параметры для выполнения работы.
Для прекращения работы этого потока вызываешь его слот quit() (слоты можно вызывать как обычные функции) и всё
«
Последнее редактирование: Декабрь 06, 2009, 20:07 от lit-uriy
»
Записан
Юра.
daimon
Гость
Re: Блокирование интерфейса
«
Ответ #8 :
Декабрь 06, 2009, 20:25 »
Цитата: lit-uriy от Декабрь 06, 2009, 20:03
>>и закрыл окно - в процессе осталось висеть приложение.
имеет смысл свернуть в "системный лоток" (tray)
>>Как обработать операцию (копирование) вывести сообщение про операцию и пердложить продолжить прервать?
когда это сообщение нужно выводить, по какому событию?
>>Как с другой функции (слота) прервать работу другой функции (которая в процессе)?
долгие операции лучше помещать в отдельный поток (смотри QThread), если ты так не сделаешь, то твоё приложение будет мёртвым, пока операция не завершится.
примерно так:
Создаёшь свой объект (наследник QThread), передаёшь в его конструктор параметры для выполнения работы.
Для прекращения работы этого потока вызываешь его слот quit() (слоты можно вызывать как обычные функции) и всё
Закрыл окно и должен убратся процесс, поэтому и нужно остановить выполнение текущей задачи.
Как узнать какая задача в текущий момент выполняется?
«
Последнее редактирование: Декабрь 06, 2009, 20:33 от daimon
»
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Блокирование интерфейса
«
Ответ #9 :
Декабрь 06, 2009, 20:46 »
>>Как узнать какая задача в текущий момент выполняется?
ты её запускаешь, ты и знать должен
Записан
Юра.
daimon
Гость
Re: Блокирование интерфейса
«
Ответ #10 :
Декабрь 06, 2009, 20:56 »
Цитата: lit-uriy от Декабрь 06, 2009, 20:46
>>Как узнать какая задача в текущий момент выполняется?
ты её запускаешь, ты и знать должен
простой пример:
есть три кнопки a b c
три отдельные слота для кнопок for_a() for_b() for(c) - в каждой выполняется большой цикл (не важно)
пользователь запустил программу и нажимает на кнопку a и выполняется for_a() , потом резко на b и запускается for_b()
Как мне в каждом из слотов проверить какая задача или поток в данный момент выполняется и вывести сообщение о текущей задаче (продолжить или прервать работу предыдущей задачи)?
Может создать указатель на поток и каждый раз его присваивать текущему потоку и проверять указывающий поток на работу
«
Последнее редактирование: Декабрь 06, 2009, 20:59 от daimon
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Блокирование интерфейса
«
Ответ #11 :
Декабрь 06, 2009, 21:04 »
Цитата: daimon от Декабрь 06, 2009, 20:25
Закрыл окно и должен убратся процесс, поэтому и нужно остановить выполнение текущей задачи.
Как узнать какая задача в текущий момент выполняется?
Выложите ф-цию, которая заполняет таблицу, я Вам добавлю что Вы хотите - нет уже сил отвечать на Ваши вопросы
Записан
daimon
Гость
Re: Проблема трудоемких задач (прервать и продолжить)
«
Ответ #12 :
Декабрь 06, 2009, 21:15 »
Цитата: Igors от Декабрь 06, 2009, 21:04
Цитата: daimon от Декабрь 06, 2009, 20:25
Закрыл окно и должен убратся процесс, поэтому и нужно остановить выполнение текущей задачи.
Как узнать какая задача в текущий момент выполняется?
Выложите ф-цию, которая заполняет таблицу, я Вам добавлю что Вы хотите - нет уже сил отвечать на Ваши вопросы
дело ведь не в заполнении таблицы, а также в копировании, вставке, вырезать, сортировка- вариант с тремя кнопками обопщение
«
Последнее редактирование: Декабрь 06, 2009, 21:17 от daimon
»
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Проблема трудоемких задач (прервать или продолжить)
«
Ответ #13 :
Декабрь 06, 2009, 21:27 »
самое простое, в слоте блокировать все кнопки, и разблокировать кнопку "прервать" (которую следует добавить), пока не прервёшь, другие процессы запустить будет нельзя.
Записан
Юра.
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Проблема трудоемких задач (прервать или продолжить)
«
Ответ #14 :
Декабрь 06, 2009, 21:29 »
собственно твоя задача - рядовая, ежедневная, задача программиста на "подумать и сделать"
Записан
Юра.
Страниц: [
1
]
2
3
...
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...