Харитани қисқартириш бу катта ҳажмдаги маълумотларни фойдали умумлаштирилган натижаларга тўплаш учун маълумотларни қайта ишлаш парадигмаси
Download 80.3 Kb.
|
Харитани қисқартириш
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 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 QFuture 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 QFuture // Map in-place only works on non-const iterators. QFuture QFuture 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 // Each call blocks until the entire operation is finished. QList 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 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 // Swap the rgb values of all pixels on a list of images. Download 80.3 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling