Харитани қисқартириш бу катта ҳажмдаги маълумотларни фойдали умумлаштирилган натижаларга тўплаш учун маълумотларни қайта ишлаш парадигмаси


Download 80.3 Kb.
bet2/3
Sana31.01.2023
Hajmi80.3 Kb.
#1142273
1   2   3
Bog'liq
Харитани қисқартириш

QtConcurrent :: blockingMap(tasvirlar , masshtab);
QImage kollaj = QtConcurrent::blockingMappedReduced ( tasvirlar , masshtablangan , addToCollage );
E'tibor bering, yuqoridagi natija turlari QFuture obyektlari emas, balki haqiqiy natija turlari (bu holda QList va QImage).
Bir vaqtning o'zida xarita yaratish masalasi quyidagi funksiya yordamida amalga oshiriladi:
QtConcurrent::mapped() kirish ketma-ketligini va xarita funktsiyasini oladi. Keyinchalik bu xarita funksiyasi ketma-ketlikning har bir elementi uchun chaqiriladi va xarita funksiyasidan qaytish qiymatlarini o'z ichiga olgan yangi ketma-ketlik qaytariladi. Xarita funktsiyasi quyidagi shaklda bo'lishi kerak:
V function(T &result, const U &intermediate)
T va U har qanday turdagi bo'lishi mumkin (ular bir xil turdagi bo'lishi mumkin), lekin T ketma-ketlikda saqlangan turga mos kelishi kerak. Funktsiya o'zgartirilgan yoki xaritalangan tarkibni qaytaradi.
Quyidagi misol ketma-ketlikdagi barcha elementlarga masshtab funksiyasini qanday qo'llashni ko'rsatadi:
QImage scaled(const QImage &image)
{
return image.scaled(100, 100);
}
QList images = ...;
QFuture thumbnails = QtConcurrent::mapped(images, scaled);

Kamaytirish funksiyasi xarita funksiyasi tomonidan qaytarilgan har bir natija uchun bir marta chaqiriladi va oraliq o'zgaruvchini natija o'zgaruvchisiga birlashtirishi kerak. QtConcurrent::mappedReduced() bir vaqtning o'zida faqat bitta IPni qisqartirishni chaqirishiga kafolat beradi, shuning uchun natija o'zgaruvchisini blokirovka qilish uchun mutexdan foydalanish shart emas. QtConcurrent::ReduceOptions enum qisqartirish tartibini nazorat qilish usulini taqdim etadi. Agar QtConcurrent::UnorderedReduce ishlatilsa (standart), tartib aniqlanmagan, QtConcurrent::OrderedReduce esa qisqartirish asl ketma-ketlik tartibida amalga oshirilishini ta'minlaydi.


Qo'shimcha API xususiyatlarini ishlatish uchun Sequence o'rniga iteratorlardan foydalanish mumkin. Yuqoridagi funksiyalarning har birida ketma-ketlik o‘rniga iterator diapazonini oladigan variant mavjud. Ularni ketma-ketlik variantlari bilan bir xil tarzda ishlatish mumkin:
QList images = ...;
QFuture thumbnails = QtConcurrent::mapped(images.constBegin(), images.constEnd(), scaled);
// Map in-place only works on non-const iterators.
QFuture future = QtConcurrent::map(images.begin(), images.end(), scale);
QFuture collage = QtConcurrent::mappedReduced(images.constBegin(), images.constEnd(), scaled, addToCollage);
Oqimlarni bloklash variantlari quyidagicha amalga oshiriladi:
Yuqoridagi funktsiyalarning har biri QFuture o'rniga yakuniy natijani qaytaradigan blokirovka variantiga ega. Ularni asenkron variantlar bilan bir xil tarzda ishlatish mumkin:
QList images = ...;
// Each call blocks until the entire operation is finished.
QList future = QtConcurrent::blockingMapped(images, scaled);
QtConcurrent::blockingMap(images, scale);
QImage collage = QtConcurrent::blockingMappedReduced(images, scaled, addToCollage);
E'tibor bering, yuqoridagi natija turlari QFuture obyektlari emas, balki haqiqiy natija turlari (bu holda QList va QImage).
A'zo funktsiyalaridan foydalanish quyidagicha amalga oshiriladi:
QtConcurrent::map(), QtConcurrent::mapped() va QtConcurrent ::mappedReduced() aʼzo funksiyalariga koʻrsatgichlarni qabul qiladi. A'zo funktsiya sinfi turi ketma-ketlikda saqlangan turga mos kelishi kerak:
// Squeeze all strings in a QStringList.
QStringList strings = ...;
QFuture squeezedStrings = QtConcurrent::map(strings, &QString::squeeze);
// Swap the rgb values of all pixels on a list of images.

Download 80.3 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling