Timer (TimerCallback, Object, Int32, Int32) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Timer (TimerCallback, Object, Int32, Int32)



Инициализирует новый экземпляр класса Timer, используя указанное 32-разрядное знаковое целое число для задания временного интервала.

public Timer (TimerCallback callback,

object state,

int dueTime,

int period);

 

Параметры:

callback - делегат TimerCallback, представляющий выполняемый метод.

 

state - объект, содержащий информацию, используемую методом ответного вызо­ва или значение пустая ссылка.

 

dueTime - количество времени до начала использования параметра callback, в миллисекундах. Следует задать поле Timeout.Infinite для того, чтобы не допустить запуск таймера. Задайте значение ноль (0) для немедленного запуска таймера.

 

period - временной интервал между вызовами параметра callback, в миллисекундах. Следует задать поле Timeout.Infinite для отключения периодического сигнализирования.

Исключения

Тип исключения Условие
ArgumentOutOfRangeException Значение параметра dueTime или period отрицательно, и не равно Infinite.
ArgumentNullException Параметр callback имеет значение пустая ссылка

Примечания

Делегат, заданный параметром callback, вызывается один раз, после того, как пройдет время, равное dueTime, и затем каждый раз по прошествии времени, равного значению period.

 

Если параметр dueTime равен нулю (0), сразу используется параметр callback. Если параметр dueTime равен Timeout.Infinite, параметр callback не используется; счетчик отключается, но он может быть включен заново вызовом метода Change.

Если параметр period равен нулю (0) или Infinite, а параметр dueTime не равен Infinite, параметр callback используется один раз; периодическое поведение таймера отключается, но может быть включено заново используя метод Change.

 

 

Пример

 

 

using System;

using System.Threading;

Class ManagementThreads

{

// Метод CheckTime вызывается по таймеру

Public static void CheckTime(Object state)

{

Console.WriteLine(DateTime.Now);

}

Static void Main()

{

// Создание делегата, который будет вызываться таймером

TimerCallback tc = new TimerCallback (CheckTime);

// Создание таймера, срабатывающего дважды в секунду (500)

// Первый запуск произойдет через одну секунду (1000)

Timer t = new Timer (tc, null, 1000, 500);

// Ожидание ввода пользователя

Console.WriteLine ("Нажмите Enter для выхода");

Console.ReadLine();

t.Dispose(); // Освобождение ресурсов

t = null;

}

}

Совет по созданию многопоточных программ

 

Если создать слишком много потоков, реальное быстродействие программы может пострадать.

Каждое переключение контекста требует определенных расходов системных ресурсов. При большом количестве потоков на изменение контекста будет потрачено больше процессорного времени, чем на выполнение самой программы!

Библиотека классов.NET Framework

Thread - класс

Создает и контролирует поток, задает его приоритет и возвращает его статус.

public sealed class Thread

Потокобезопасность: этот тип можно безопасно использовать в многопоточных операциях.

Примечания

Процесс может создавать один или более потоков для выполнения частей программного кода, связанного с процессом. Следует использовать делегат ThreadStart для задания программного кода, выполняемого потоком.

В течение своего существования поток всегда находится в одном или более состояниях, определенных в классе ThreadState. Для потока можно запрашивать планирование уровня приоритета, который определяется классом ThreadPriority, но не гарантируется, что операционная система предоставит его.

Метод GetHashCode предоставляет идентификацию управляемых потоков. В течение жизни поток не будет конфликтовать со значениями, полученными от других потоков, независимо от домена приложения, из которой получается значение.

Примечание. Идентификационный номер потока (ThreadId) операционной системы не имеет жесткой взаимосвязи с управляемым потоком, так как неуправляемый хост может контролировать взаимосвязь между управляемыми и неуправляемыми потоками. В частности, сложный хост может использовать API общеязыковой среды выполнения для планирования нескольких управляемых потоков на один поток операционной системы или перемещения управляемых потоков между различными потоками операционной системы.

Пример

using System;using System.Threading; // Simple threading scenario: Start a static method running// on a second thread. public class ThreadExample { // The ThreadProc method is called when the thread starts. // It loops ten times, writing to the console and yielding // the rest of its time slice each time, and then ends. public static void ThreadProc () { for (int i = 0; i < 10; i++) { Console.WriteLine("ThreadProc: {0}", i); // Yield the rest of the time slice. Thread.Sleep(0); } } public static void Main () { Console.WriteLine("Main thread: Start a second thread."); // The constructor for the Thread class requires a ThreadStart // delegate that represents the method to be executed on the // thread. C# simplifies the creation of this delegate. Thread t = new Thread(new ThreadStart(ThreadProc)); // Start ThreadProc. On a uniprocessor, the thread does not get // any processor time until the main thread yields. Uncomment // the Thread.Sleep that follows t.Start() to see the difference. t.Start(); //Thread.Sleep(0); for (int i = 0; i < 4; i++) { Console.WriteLine("Main thread: Do some work."); Thread.Sleep(0); } Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends."); t.Join(); Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program."); Console.ReadLine(); }}

Этот код формирует выходные данные, подобные приведенным ниже:

Main thread: Start a second thread.Main thread: Do some work.ThreadProc: 0Main thread: Do some work.ThreadProc: 1Main thread: Do some work.ThreadProc: 2Main thread: Do some work.ThreadProc: 3Main thread: Call Join(), to wait until ThreadProc ends.ThreadProc: 4ThreadProc: 5ThreadProc: 6ThreadProc: 7ThreadProc: 8ThreadProc: 9Main thread: ThreadProc.Join has returned. Press Enter to end program.

Пространство имен: System.Threading

Thread - члены

Открытые конструкторы

Thread - конструктор Инициализирует новый экземпляр класса Thread.

Открытые свойства

ApartmentState Возвращает или задает состояние апартамента для данного потока.
CurrentContext Возвращает текущий контекст, в котором выполняется поток.
CurrentCulture Возвращает или задает культуру для текущего потока.
CurrentPrincipal Возвращает или задает текущий принципал потока (для безопасности на основе ролей).
CurrentThread   Возвращает выполняющийся в данный момент поток.
CurrentUICulture Возвращает или задает текущую культуру, используемую диспетчером ресурсов для поиска ресурсов, связанных с культурой, во время выполнения.
IsAlive Возвращает значение, показывающее статус выполнения текущего потока.
IsBackground Возвращает или задает значение, показывающее, является ли поток фоновым.
IsThreadPoolThread Возвращает значение, показывающее, принадлежит ли поток к группе управляемых потоков.
Name Возвращает или задает имя потока.
Priority   Возвращает или задает значение, указывающее на планируемый приоритет потока.
ThreadState Возвращает значение, содержащее состояния текущего потока.

Открытые методы

Abort Перегружен. Вызывает исключение ThreadAbortException в вызвавшем его потоке для того, чтобы начать процесс завершения потока. Вызов этого метода обычно завершает поток.
AllocateDataSlot Выделяет неименованную область данных всем потокам.
AllocateNamedDataSlot Выделяет именованную область данных всем потокам.
Equals (унаследовано от Object) Перегружен. Определяет, равны ли два экземпляра Object.
FreeNamedDataSlot Удаляет связь между названием и областью для всех потоков в процессе.
GetData Извлекает значение из заданной области текущего потока, внутри текущей области текущего потока.
GetDomain Возвращает текущую область, в которой выполняется текущий поток.
GetDomainID Возвращает уникальный идентификатор домена приложения.
GetHashCode (унаследовано от Object) Служит хеш-функцией для конкретного типа, пригоден для использования в алгоритмах хеширования и структурах данных, например в хеш-таблице.
GetNamedDataSlot Ищет именованную область данных.
GetType (унаследовано от Object) Возвращает Type текущего экземпляра.
Interrupt Прерывает работу потока, находящегося в состоянии WaitSleepJoin.
Join Перегружен. Блокирует вызывающий поток до завершения потока.
MemoryBarrier Синхронизирует память. Как результат сбрасывает содержимое кэш-памяти в основную память для процессора, выполняющего текущий поток.
ResetAbort Отменяет метод Abort, запрошенный для текущего потока.
Resume Возобновляет приостановленную работу потока.
SetData Задает данные в указанной области для текущей области потока, выполняющегося в данный момент.
Sleep Перегружен. Блокирует текущий поток на заданное количество миллисекунд.
SpinWait Вынуждает поток ожидать количество времени, определенное параметром iterations.
Start Вынуждает операционную систему изменить состояние текущего экземпляра на ThreadState.Running.
Suspend Приостанавливает работу потока; если работа потока уже приостановлена, не оказывает влияния.
ToString (унаследовано от Object) Возвращает String, который представляет текущий Object.
VolatileRead Перегружен. Считывает значение поля. Это значение является последним, записанным каким-либо из процессоров компьютера, независимо от количества процессоров и от состояния кэш-буфера процессоров.
VolatileWrite Перегружен. Записывает значение непосредственно в поле, так что оно становится видимым для всех процессоров компьютера.

Защищенные методы

Finalize   Переопределен. Освобождает ресурсы, удерживаемые экземпляром. В языках C# и C++ для функций финализации используется синтаксис деструктора.
MemberwiseClone (унаследовано от Object) Создает неполную копию текущего Object.

- статический

ThreadState - перечисление

Задает состояния выполнения объекта Thread.

Атрибут FlagsAttribute этого перечисления разрешает двоичные операции со значениями его членов.

[Flags][Serializable] public enum ThreadState

Примечания

Класс ThreadState определяет набор всех возможных состояний выполнения для потока. После создания потока и до завершения он находится по крайней мере в одном из состояний. Потоки, созданные в общеязыковой среде выполнения, изначально находятся в состоянии Unstarted, в то время как внешние потоки, приходящие в среду выполнения, находятся уже в состоянии Running. Потоки с состоянием Unstarted переходят в состояние Running при вызове метода Start. Не все комбинации значений ThreadState являются допустимыми; например, поток не может быть одновременно в состояниях Aborted и Unstarted.

В следующей таблице перечислены действия, вызывающие смену состояния.

Действие Состояние Потока
Поток создается в среде CLR. Unstarted
Поток вызывает метод Start. Running
Поток начинает выполнение. Running
Поток вызывает метод Sleep. WaitSleepJoin
Поток вызывает метод Wait для другого объекта. WaitSleepJoin
Поток вызывает метод Join для другого потока. WaitSleepJoin
Другой поток вызывает метод Interrupt. Running
Другой поток вызывает метод Suspend. SuspendRequested
Поток отвечает на запрос метода Suspend. Suspended
Другой поток вызывает метод Resume. Running
Другой поток вызывает метод Abort. AbortRequested
Поток отвечает на запрос метода Abort. Stopped
Поток завершен. Stopped

В дополнение к вышеперечисленным состояниям, существует также Background состояние, которое указывает, выполняется ли поток на фоне или на переднем плане.

Поток может находиться в более, чем одном состоянии одновременно. Например, если поток заблокирован при вызове к методу Wait, а другой поток вызывает метод Abort к заблокированному потоку, то этот заблокированный поток будет находится одновременно в состояниях WaitSleepJoin и AbortRequested. В этом случае, как только поток осуществляет возврат из вызова к методу Wait или его работа прерывается, он получит исключение ThreadAbortException для начала аварийного завершения.

Свойство Thread.ThreadState потока содержит текущее состояние потока. Приложения должны использовать битовую маску для того, чтобы определить, выполняется поток или нет. Если значение для состояния Running потока равно нулю (0), следует проверить, выполняется ли поток, используя код C#, например, (myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0, или код Visual Basic, например, (myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0.

Члены

Имя члена Описание Значение
Aborted Поток находится в Stopped состоянии.  
AbortRequested Метод Thread.Abort был вызван для потока, но поток еще не получил задерживающийся объект System.Threading.ThreadAbortException, который будет пытаться завершить поток.  
Background Поток выполняется как фоновый поток, что является противоположным к приоритетному потоку. Это состояние контролируется заданием свойства Thread.IsBackground.  
Running Поток был запущен, он не заблокирован, и нет задерживающегося объекта ThreadAbortException.  
Stopped Процесс остановлен.  
StopRequested Поток запрашивается на остановку. Это только для внутреннего использования.  
Suspended Работа потока была приостановлена.  
SuspendRequested Запрашивается приостановка работы потока.  
Unstarted Метод Thread.Start не был вызван для потока.  
WaitSleepJoin Поток заблокирован в результате вызова к методам Wait, Sleep или Join.  

Требования

Пространство имен: System.Threading

Сборка: Mscorlib (в Mscorlib.dll)

См. также

System.Threading - пространство имен | Thread | Состояния потоков | Управляемые и неуправляемые потоки



Поделиться:


Последнее изменение этой страницы: 2016-09-05; просмотров: 269; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.31.240 (0.025 с.)