Toshkent axborot texnologiyalari universiteti samarqand filiali kompyuter tizimlari kafedrasi


Misol 10. Navbatdan qabul qilishda blokirovka qilish



Yüklə 153,03 Kb.
səhifə9/13
tarix26.04.2023
ölçüsü153,03 Kb.
#102908
1   ...   5   6   7   8   9   10   11   12   13
mus ish

Misol 10. Navbatdan qabul qilishda blokirovka qilish
xQueue
Machine Translated by Google
Ro'yxat 35 navbatdan ma'lumotlarni qabul qiladigan vazifaning bajarilishini ko'rsatadi. Qabul qiluvchi vazifa 100 millisekundlik bloklanish vaqtini belgilaydi, shuning uchun ma'lumotlar mavjud bo'lishini kutish uchun Bloklangan holatga o'tadi. Navbatda maÿlumotlar mavjud boÿlganda yoki maÿlumotlar mavjud boÿlmasdan 100 millisekund oÿtganda u Bloklangan holatdan chiqadi. Ushbu misolda 100 millisekundlik kutish muddati hech qachon tugamasligi kerak, chunki navbatga doimiy ravishda yoziladigan ikkita vazifa mavjud.
Birinchi parametr - ma'lumotlar yuboriladigan navbat. Navbat rejalashtiruvchi ishga tushirilishidan oldin yaratilgan, shuning uchun bu vazifani bajarish boshlanishidan oldin.
if( xStatus != pdPASS ) {
Listing 34 10-misolda qo'llanilgan jo'natish vazifasini amalga oshirish.
/* Qiymatni navbatga yuboring.
Uchinchi parametr - Bloklash vaqti - navbat allaqachon to'lgan bo'lsa, navbatda bo'sh joy bo'lishini kutish uchun vazifani Bloklangan holatda saqlash kerak bo'lgan vaqt. Bunday holda bloklash vaqti ko'rsatilmaydi, chunki
navbat hech qachon bir nechta elementni o'z ichiga olmaydi va shuning uchun hech qachon to'la bo'lmasligi kerak. */ xStatus = xQueueSendToBack( xQueue, &lValueToSend, 0 );
}
/ }
* Ko'pgina vazifalarga ko'ra, bu vazifa cheksiz tsiklda amalga oshiriladi. */ uchun(;; ) {
Ikkinchi parametr yuboriladigan ma'lumotlarning manzili, bu holda lValueToSend manzili.
/* Navbatga yuborilgan qiymat topshiriq parametri orqali uzatilishi uchun bu vazifaning ikkita nusxasi yaratilgan - shu tarzda har bir misol boshqa qiymatdan foydalanishi mumkin. Navbat uzun turdagi qiymatlarni ushlab turish uchun yaratilgan, shuning uchun parametrni kerakli turga o'tkazing. */ lValueToSend = ( long ) pvParameters;
/* Boshqa jo‘natuvchi vazifasini bajarishga ruxsat bering. taskYIELD() rejalashtiruvchiga bu vazifani joriy vaqt oraligÿi oxirigacha Ishlayotgan holatda ushlab turish oÿrniga boshqa vazifaga oÿtish hozir sodir boÿlishi kerakligi haqida xabar beradi. */ taskYIELD();
/* Yuborish operatsiyasi tugallanmadi, chunki navbat to'la edi - bu xato bo'lishi kerak, chunki navbatda hech qachon bir nechta element bo'lmasligi kerak! */ vPrintString( "Navbatga yuborib bo'lmadi.\r\n" );

Yüklə 153,03 Kb.

Dostları ilə paylaş:
1   ...   5   6   7   8   9   10   11   12   13




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin