Олий таълим ўқув режаларидаги фанларга



Download 4,03 Mb.
bet88/102
Sana23.02.2022
Hajmi4,03 Mb.
#136190
1   ...   84   85   86   87   88   89   90   91   ...   102
Bog'liq
Dasturlash asoslari majmua

Асинхрон делегатлар


Делегатларани бажариш учун ёки илгари кўрсатилганидек синхрон, ёки BeginInvoke хамда EndInvoke методлари ёрдамида асинрхрон чақирилиши мумкин.
Делегат BeginInvoke методи ёрдами да чақирилганда бажариш муҳити бажариш учун методнинг алоҳида оқиминри ташкил қилади ва бошқарувни чақиришдан кейинги буйруққа узатади. Бунда бошланғич оқимда ҳисоблашни давом эттириш мумкин.
Агар BeginInvoke метолди билан чақиришда тескари мурожаат методи кўрсатилган бўлса, у холда бу метод оқим якунланганидан кейин ишга тушади. Шунингдек, тескари мурожаат ҳам делегат ёрдамида кўрсатилади ва бунда стандарт делегат AsyncCallback дан фойдаланилади. Тескари мурожаатда қайтариладиган қийматлар хамда чиқувчи параметрларни олиш учун EndInvoke методи қўлланилади.
Агар тескари мурожаат методи BeginInvoke методи парамтерларида кўрсатилмаган бўлса, у холда EndInvoke методидан сўровнома ташкил қилган оқимда фойдаланиш мумкин.
25.8-листингда сонни кўпайтувчиларга ажратувчи методни асинхрон чақирувчи иккита намуна келтирилади. Листингда Visual Studio ҳужжатларида келтирилган намунани бир оз ўзгартирилади.
Factorizer методи ўз ичигасонни кўпайтувчиларга ажратувчи Factorize методини олади. Бу метод асинхрон равишда икки хил усул билан чақирилмоқда: Num1 методида тескари мурожаат методи BeginInvoke да кўрсатилади, Num2 методда эса оқимнри тугашини кутилади ва бевосита EndInvoke методи чақирилади. .
25.8-листинг. Асинхрон делегатлар
using System;
using System.Threading;
using System.Runtime.Remoting.Messaging; // асинхрон делегат
public delegate bool AsyncDelegate ( int Num, out int m1, out int m2 );
//сонни кўпайтувчиларга ажратувчи клас
public class Factorizer
{
public bool Factorize( int Num, out int m1, out int m2 )
{
m1 = 1; m2 = Num;
for ( int i = 2; i < Num; i++ )
if ( 0 == (Num % i) ) { m1 = i; m2 = Num / i; break; }
if (1 == m1 ) return false;
else return true;
}
}
// делегар ва натижаларни олучи класс
public class PNum
{
private int Number;
public PNum( int number ) { Number = number; }
[OneWayAttribute()]
//натижаларни олувчи метод
public void Res( IAsyncResult ar )
{
int m1, m2;
// делегатни AsyncResult дан олиш
AsyncDelegate ad = (AsyncDelegate)((AsyncResult)ar).AsyncDelegate;
// Factorize методи натижасини олиш
ad.EndInvoke( out m1, out m2, ar );
// натижаларни чиқариш
Console.WriteLine( "Биринчи усул :кўпайтувчилар {0} : {1} {2}",
Number, m1, m2 );
}
}
// демонстрацион класс
public class Simple
{
// 1-усул: тескари мурожаат функцияси қўлланилмоқда
public void Num1()
{
Factorizer f = new Factorizer();
AsyncDelegate ad = new AsyncDelegate ( f.Factorize );
int Num = 1000589023, tmp;
// Factorize методи иши тугаганидан кейин чақириладиган класс экземпляри
PNum n = new PNum( Num );
// тескари мурожаат методи делегатини кўрсатиш
AsyncCallback callback = new AsyncCallback( n.Res );
// Factorize методини асинхрон чақириш
IAsyncResult ar = ad.BeginInvoke(
Num, out tmp, out tmp, callback, null );
//
// бу ерда қандайдир амаллар бажарилади
// ...
}
// 2-усул: бажарилиш жараёнини тугашини кутиш
public void Num2()
{
Factorizer f = new Factorizer();
AsyncDelegate ad = new AsyncDelegate ( f.Factorize );
int Num = 1000589023, tmp;
// Factorize методи иши тугаганидан кейин чақириладиган класс экземпляри
PNum n = new PNum( Num );
// тескари мурожаатметоди делегатини кўрсатиш AsyncCallback callback = new AsyncCallback( n.Res );
// Factorize методинри асинхрон чақириш
IAsyncResult ar = ad.BeginInvoke(
Num, out tmp, out tmp, null, null );
//тугашини кутиш
ar.AsyncWaitHandle.WaitOne( 10000, false );
if ( ar.IsCompleted )
{
int m1, m2;
// Factorize методи натижаларини олиш
ad.EndInvoke( out m1, out m2, ar );
// натижаларни чиқариш
Console.WriteLine( "Иккинчи усул: кўпайтувчилар {0} : {1} {2}",
Num, m1, m2 );
}
}
public static void Main()
{
Simple s = new Simple();
s.Num1();
s.Num2();
}
}
Дастурнинг натижаси қуйидагича:
Биринчи усул: кўпайтувчилар 1000589023 : 7 142941289
Иккинчи усул: кўпайтувчилар 1000589023 : 7 142941289

Download 4,03 Mb.

Do'stlaringiz bilan baham:
1   ...   84   85   86   87   88   89   90   91   ...   102




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish