Название: Прервать выполнение QtConcurrent::run Отправлено: deMax от Сентябрь 19, 2013, 15:14 Собственно загружаю в отдельном потоке изображение, QImage::load. Изображение большое и грузится не быстро. Как мне остановить поток и прервать загрузку?
Название: Re: Прервать выполнение QtConcurrent::run Отправлено: mutineer от Сентябрь 19, 2013, 15:17 Цитировать Note that the QFuture returned by QtConcurrent::run() does not support canceling, pausing, or progress reporting. Название: Re: Прервать выполнение QtConcurrent::run Отправлено: deMax от Сентябрь 19, 2013, 15:23 Цитировать Note that the QFuture returned by QtConcurrent::run() does not support canceling, pausing, or progress reporting. Название: Re: Прервать выполнение QtConcurrent::run Отправлено: mutineer от Сентябрь 19, 2013, 15:31 Например при помощи QThread
Название: Re: Прервать выполнение QtConcurrent::run Отправлено: Igors от Сентябрь 19, 2013, 15:51 вызвать в нем QImage::load(bigfile) и прервать его выполнение? Банальный ответ: никак, а если хочется - пусть перехочется. Стрелять нитку и сидеть с ошметками недогруженного имеджа себе дорожеНазвание: Re: Прервать выполнение QtConcurrent::run Отправлено: deMax от Сентябрь 21, 2013, 12:55 вызвать в нем QImage::load(bigfile) и прервать его выполнение? Банальный ответ: никак, а если хочется - пусть перехочется. Стрелять нитку и сидеть с ошметками недогруженного имеджа себе дорожеТеперь вопрос по потокам: есть данные settings, пользователь может на них влиять нажимая кнопочки, отрисовка происходит по таймеру и использует данные из settings только для чтения: void on_timer() {foreach(Layer *l, layers)l->paint;} потоков не создаю(функций createthread....нет), processEvent в l->paint тоже нет. Могут ли в процессе выполнения функции on_timer изменияться данные settings? Название: Re: Прервать выполнение QtConcurrent::run Отправлено: Igors от Сентябрь 21, 2013, 13:17 Теперь вопрос по потокам: есть данные settings, пользователь может на них влиять нажимая кнопочки, отрисовка происходит по таймеру и использует данные из settings только для чтения: void on_timer() {foreach(Layer *l, layers)l->paint;} потоков не создаю(функций createthread....нет), processEvent в l->paint тоже нет. Могут ли в процессе выполнения функции on_timer изменияться данные settings? Впечатление что в действительности вопрос "так почему же они измнились ?" :) Не должны, т.к. все происходит синхронно - события UI не получат управления пока on_timer не завершится (по крайней мере в той же нитке) Название: Re: Прервать выполнение QtConcurrent::run Отправлено: deMax от Сентябрь 23, 2013, 10:27 Впечатление что в действительности вопрос "так почему же они измнились ?" Да нет, вопрос паранойи. Если программа начнет рисовать, а используемые ей данные начнут параллельно изменяться или вызовется слот который перестроит список с указателями - что может привести к вылету.Название: Re: Прервать выполнение QtConcurrent::run Отправлено: Igors от Сентябрь 23, 2013, 10:47 Да нет, вопрос паранойи. Если программа начнет рисовать, а используемые ей данные начнут параллельно изменяться или вызовется слот который перестроит список с указателями - что может привести к вылету. Чтобы сердце успокоилось - натыкайте assert'ов, напрКод
Название: Re: Прервать выполнение QtConcurrent::run Отправлено: Авварон от Сентябрь 23, 2013, 19:43 Ох, знатоки собрались. Поищите в сорцах креатора файл runextensions.h
|