Russian Qt Forum
Ноябрь 26, 2024, 16:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 5   Вниз
  Печать  
Автор Тема: Трудоемкие задачи (прервать или продолжить). Как прервать?  (Прочитано 33555 раз)
daimon
Гость
« : Декабрь 06, 2009, 18:11 »

Как на момент выполнения трудоемкой задачи заблокировать сигналы от кнопок, закрытие окна.....?
« Последнее редактирование: Декабрь 10, 2009, 01:34 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Декабрь 06, 2009, 18:33 »

чтобы юзер выяснил, где ты живёшь и нанял килера?
Записан

Юра.
daimon
Гость
« Ответ #2 : Декабрь 06, 2009, 18:55 »

чтобы юзер выяснил, где ты живёшь и нанял килера?
Закроешь окно, а процесс висит- надо это обработать
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Декабрь 06, 2009, 19:03 »

>>Закроешь окно, а процесс висит
не понял, он что внешний, через QProcess создаётся?
Записан

Юра.
daimon
Гость
« Ответ #4 : Декабрь 06, 2009, 19:11 »

>>Закроешь окно, а процесс висит
не понял, он что внешний, через QProcess создаётся?
Нет процесс приложения (всё намного проще).
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Декабрь 06, 2009, 19:28 »

А почему висит?
Закрыл окно, приложение не выгрузилось? Может стоит подумать о связи объектов, организовать её так, чтобы все объекты создавалась в конструкторе окна, а не параллельно с ним.
Либо смотреть в сторону свойства quitOnLastWindowClosed
Записан

Юра.
daimon
Гость
« Ответ #6 : Декабрь 06, 2009, 19:47 »

А почему висит?
Закрыл окно, приложение не выгрузилось? Может стоит подумать о связи объектов, организовать её так, чтобы все объекты создавалась в конструкторе окна, а не параллельно с ним.
Либо смотреть в сторону свойства quitOnLastWindowClosed
Задача такая:
поставил на копирование много ячеек таблицы
и закрыл окно - в процессе осталось висеть приложение.
Как обработать операцию (копирование) вывести сообщение про операцию и пердложить продолжить прервать?
Как с другой функции (слота) прервать работу другой функции (которая в процессе)?
« Последнее редактирование: Декабрь 06, 2009, 19:50 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Декабрь 06, 2009, 20:03 »

>>и закрыл окно - в процессе осталось висеть приложение.
имеет смысл свернуть в "системный лоток" (tray)

>>Как обработать операцию (копирование) вывести сообщение про операцию и пердложить продолжить прервать?
когда это сообщение нужно выводить, по какому событию?

>>Как с другой функции (слота) прервать работу другой функции (которая в процессе)?
долгие операции лучше помещать в отдельный поток (смотри QThread), если ты так не сделаешь, то твоё приложение будет мёртвым, пока операция не завершится.
примерно так:
Создаёшь свой объект (наследник QThread), передаёшь в его конструктор параметры для выполнения работы.
Для прекращения работы этого потока вызываешь его слот quit() (слоты можно вызывать как обычные функции) и всё
« Последнее редактирование: Декабрь 06, 2009, 20:07 от lit-uriy » Записан

Юра.
daimon
Гость
« Ответ #8 : Декабрь 06, 2009, 20:25 »

>>и закрыл окно - в процессе осталось висеть приложение.
имеет смысл свернуть в "системный лоток" (tray)

>>Как обработать операцию (копирование) вывести сообщение про операцию и пердложить продолжить прервать?
когда это сообщение нужно выводить, по какому событию?

>>Как с другой функции (слота) прервать работу другой функции (которая в процессе)?
долгие операции лучше помещать в отдельный поток (смотри QThread), если ты так не сделаешь, то твоё приложение будет мёртвым, пока операция не завершится.
примерно так:
Создаёшь свой объект (наследник QThread), передаёшь в его конструктор параметры для выполнения работы.
Для прекращения работы этого потока вызываешь его слот quit() (слоты можно вызывать как обычные функции) и всё

Закрыл окно и должен убратся процесс, поэтому и нужно остановить выполнение текущей задачи.
Как узнать какая задача в текущий момент выполняется?
« Последнее редактирование: Декабрь 06, 2009, 20:33 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Декабрь 06, 2009, 20:46 »

>>Как узнать какая задача в текущий момент выполняется?
ты её запускаешь, ты и знать должен
Записан

Юра.
daimon
Гость
« Ответ #10 : Декабрь 06, 2009, 20:56 »

>>Как узнать какая задача в текущий момент выполняется?
ты её запускаешь, ты и знать должен
простой пример:
есть три кнопки a b c
три отдельные слота для кнопок for_a() for_b() for(c) - в каждой выполняется большой цикл (не важно)

пользователь запустил программу и нажимает на кнопку a и выполняется for_a() , потом резко на b и запускается for_b()
Как мне в каждом из слотов проверить какая задача или поток в данный момент выполняется и вывести сообщение о текущей задаче (продолжить или прервать работу предыдущей задачи)?
Может создать указатель на поток и каждый раз его присваивать текущему потоку и проверять указывающий поток на работу
 
« Последнее редактирование: Декабрь 06, 2009, 20:59 от daimon » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Декабрь 06, 2009, 21:04 »

Закрыл окно и должен убратся процесс, поэтому и нужно остановить выполнение текущей задачи.
Как узнать какая задача в текущий момент выполняется?
Выложите ф-цию, которая заполняет таблицу, я Вам добавлю что Вы хотите - нет уже сил отвечать на Ваши вопросы Улыбающийся
Записан
daimon
Гость
« Ответ #12 : Декабрь 06, 2009, 21:15 »

Закрыл окно и должен убратся процесс, поэтому и нужно остановить выполнение текущей задачи.
Как узнать какая задача в текущий момент выполняется?
Выложите ф-цию, которая заполняет таблицу, я Вам добавлю что Вы хотите - нет уже сил отвечать на Ваши вопросы Улыбающийся
дело ведь не в заполнении таблицы, а также в копировании, вставке, вырезать, сортировка- вариант с тремя кнопками обопщение

« Последнее редактирование: Декабрь 06, 2009, 21:17 от daimon » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #13 : Декабрь 06, 2009, 21:27 »

самое простое, в слоте блокировать все кнопки, и разблокировать кнопку "прервать" (которую следует добавить), пока не прервёшь, другие процессы запустить будет нельзя.
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Декабрь 06, 2009, 21:29 »

собственно твоя задача - рядовая, ежедневная, задача программиста на "подумать и сделать"
Записан

Юра.
Страниц: [1] 2 3 ... 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.114 секунд. Запросов: 23.