Net framework 5, а также среды Visual Studio 2012 и C#


Периодические вычислительные операции



Download 6,27 Mb.
Pdf ko'rish
bet581/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   577   578   579   580   581   582   583   584   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Периодические вычислительные операции
В пространстве имен 
System.Threading
определен класс 
Timer
, который позволяет 
периодически вызывать методы из пула потоков. Создавая экземпляр этого класса, 
вы сообщаете пулу, что вам нужен метод, обратный вызов которого должен быть 
выполнен в заданное время. У класса 
Timer
есть несколько очень похожих друг на 
друга конструкторов:
public sealed class Timer : MarshalByRefObject, IDisposable {
public Timer(TimerCallback callback, Object state, 
Int32 dueTime, Int32 period);
public Timer(TimerCallback callback, Object state, 
UInt32 dueTime, UInt32 period);
public Timer(TimerCallback callback, Object state, 
Int64 dueTime, Int64 period);
public Timer(TimerCallback callback, Object state, 
Timespan dueTime, TimeSpan period);
}
Все эти конструкторы создают объект 
Timer
. Параметр 
callback
указывает имя 
метода, обратный вызов которого должен выполниться потоком из пула. Конечно, 
созданный метод обратного вызова должен соответствовать типу делегата 
System.
Threading.TimerCallback
, который определяется следующим образом:
delegate void TimerCallback(Object state);


780
Глава.27 .Асинхронные.вычислительные.операции
Параметр 
state
конструктора служит для передачи методу обратного вызова 
данных состояния; если эти данные отсутствуют, передается 
null
. Параметр 
dueTime
позволяет задать для CLR время ожидания (в миллисекундах) перед первым вызо-
вом метода обратного вызова. Это время представляется 32-разрядным значением 
со знаком или без, 64-разрядным значением со знаком или значением 
TimeSpan

Чтобы метод обратного вызова активизировался немедленно, передайте в пара-
метре 
dueTime
значение 0. Последний параметр 
period
указывает периодичность 
(в миллисекундах) последующих обращений к методу обратного вызова. Если ему 
передано значение 
Timeout.Infinite(-1)
, поток из пула ограничится одним об-
ращением к методу обратного вызова.
В пуле имеется всего один поток для всех объектов 
Timer
. Именно он знает время 
активизации следующего таймера. В этот момент поток пробуждается и вызывает 
метод 
QueueUserWorkItem
объекта 
ThreadPool
, чтобы добавить в очередь пула по-
токов элемент, активизирующий метод обратного вызова. Если выполнение метода 
занимает много времени, возможно повторное срабатывание таймера. В результате 
один метод будет выполняться несколькими потоками пула. Решить эту пробле-
му можно при помощи таймера, параметру 
period
которого присвоено значение 
Timeout.Infinite
. Такой таймер срабатывает только один раз. Затем в рамках 
метода обратного вызова вызывается метод 
Change
и указывается новое время за-
держки, а параметру 
period
снова присваивается значение 
Timeout.Infinite
. Вот 
как выглядят перегруженные версии метода 
Change
:
public sealed class Timer : MarshalByRefObject, IDisposable {
public Boolean Change(Int32 dueTime, Int32 period);
public Boolean Change(UInt32 dueTime, UInt32 period);
public Boolean Change(Int64 dueTime, Int64 period);
public Boolean Change(TimeSpan dueTime, TimeSpan period);
}
Класс 
Timer
содержит также метод 
Dispose
, позволяющий вообще отключать 
таймер и при желании при помощи параметра 
notifyObject
сообщать ядру о за-
вершении всех ожидающих обратных вызовов. Вот как выглядят перегруженные 
версии метода 
Dispose
:
public sealed class Timer : MarshalByRefObject, IDisposable {
public Boolean Dispose();
public Boolean Dispose(WaitHandle notifyObject);
}

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   577   578   579   580   581   582   583   584   ...   658




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