Timer 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 간격으로 스레드 풀 스레드에서 메서드를 실행하는 메커니즘을 제공합니다. 이 클래스는 상속할 수 없습니다.
public ref class Timer sealed : IDisposable
public ref class Timer sealed : MarshalByRefObject, IAsyncDisposable, IDisposable
public ref class Timer sealed : MarshalByRefObject, System::Threading::ITimer
public ref class Timer sealed : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : IDisposable
public sealed class Timer : MarshalByRefObject, IAsyncDisposable, IDisposable
public sealed class Timer : MarshalByRefObject, System.Threading.ITimer
public sealed class Timer : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : MarshalByRefObject, IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type Timer = class
interface IDisposable
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
interface ITimer
type Timer = class
inherit MarshalByRefObject
interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type Timer = class
inherit MarshalByRefObject
interface IDisposable
Public NotInheritable Class Timer
Implements IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements ITimer
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IDisposable
- 상속
-
Timer
- 상속
- 특성
- 구현
예제
다음 예제에서는 서명이 TimerCallback 대리자와 동일한 CheckStatus
메서드를 포함하는 StatusChecker
클래스를 정의합니다.
CheckStatus
메서드의 state
인수는 애플리케이션 스레드와 콜백 대리자를 실행하는 스레드 풀 스레드를 동기화하는 데 사용되는 AutoResetEvent 개체입니다.
StatusChecker
클래스에는 두 가지 상태 변수도 포함됩니다.
invokeCount
콜백 메서드가 호출된 횟수를 나타냅니다.
maxCount
콜백 메서드를 호출해야 하는 최대 횟수를 결정합니다.
애플리케이션 스레드는 1초 동안 기다린 다음 250밀리초마다 CheckStatus
콜백 메서드를 실행하는 타이머를 만듭니다. 그런 다음, 애플리케이션 스레드는 AutoResetEvent 개체가 신호를 보낼 때까지 차단합니다.
CheckStatus
콜백 메서드가 maxCount
실행되면 AutoResetEvent.Set
메서드를 호출하여 신호를 보낼 AutoResetEvent 개체의 상태를 설정합니다. 이 경우 애플리케이션 스레드가 Change(Int32, Int32) 메서드를 호출하여 이제 콜백 메서드가 1초마다 실행됩니다.
AutoResetEvent 개체가 신호를 보낼 때까지 다시 한 번 차단됩니다. 이 경우 타이머는 Dispose 메서드를 호출하여 제거되고 애플리케이션이 종료됩니다.
using namespace System;
using namespace System::Threading;
ref class StatusChecker
{
private:
int invokeCount, maxCount;
public:
StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
void CheckStatus(Object^ stateInfo)
{
AutoResetEvent^ autoEvent = dynamic_cast<AutoResetEvent^>(stateInfo);
Console::WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.",
DateTime::Now, ++invokeCount);
if (invokeCount == maxCount) {
// Reset the counter and signal the waiting thread.
invokeCount = 0;
autoEvent->Set();
}
}
};
ref class TimerExample
{
public:
static void Main()
{
// Create an AutoResetEvent to signal the timeout threshold in the
// timer callback has been reached.
AutoResetEvent^ autoEvent = gcnew AutoResetEvent(false);
StatusChecker^ statusChecker = gcnew StatusChecker(10);
// Create a delegate that invokes methods for the timer.
TimerCallback^ tcb =
gcnew TimerCallback(statusChecker, &StatusChecker::CheckStatus);
// Create a timer that invokes CheckStatus after one second,
// and every 1/4 second thereafter.
Console::WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
DateTime::Now);
Timer^ stateTimer = gcnew Timer(tcb, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every half second.
autoEvent->WaitOne(5000, false);
stateTimer->Change(0, 500);
Console::WriteLine("\nChanging period to .5 seconds.\n");
// When autoEvent signals the second time, dispose of the timer.
autoEvent->WaitOne(5000, false);
stateTimer->~Timer();
Console::WriteLine("\nDestroying timer.");
}
};
int main()
{
TimerExample::Main();
}
// The example displays output like the following:
// 11:59:54.202 Creating timer.
//
// 11:59:55.217 Checking status 1.
// 11:59:55.466 Checking status 2.
// 11:59:55.716 Checking status 3.
// 11:59:55.968 Checking status 4.
// 11:59:56.218 Checking status 5.
// 11:59:56.470 Checking status 6.
// 11:59:56.722 Checking status 7.
// 11:59:56.972 Checking status 8.
// 11:59:57.223 Checking status 9.
// 11:59:57.473 Checking status 10.
//
// Changing period to .5 seconds.
//
// 11:59:57.474 Checking status 1.
// 11:59:57.976 Checking status 2.
// 11:59:58.476 Checking status 3.
// 11:59:58.977 Checking status 4.
// 11:59:59.477 Checking status 5.
// 11:59:59.977 Checking status 6.
// 12:00:00.478 Checking status 7.
// 12:00:00.980 Checking status 8.
// 12:00:01.481 Checking status 9.
// 12:00:01.981 Checking status 10.
//
// Destroying timer.
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
// Create an AutoResetEvent to signal the timeout threshold in the
// timer callback has been reached.
var autoEvent = new AutoResetEvent(false);
var statusChecker = new StatusChecker(10);
// Create a timer that invokes CheckStatus after one second,
// and every 1/4 second thereafter.
Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
DateTime.Now);
var stateTimer = new Timer(statusChecker.CheckStatus,
autoEvent, 1000, 250);
// When autoEvent signals, change the period to every half second.
autoEvent.WaitOne();
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period to .5 seconds.\n");
// When autoEvent signals the second time, dispose of the timer.
autoEvent.WaitOne();
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
private int invokeCount;
private int maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine("{0} Checking status {1,2}.",
DateTime.Now.ToString("h:mm:ss.fff"),
(++invokeCount).ToString());
if(invokeCount == maxCount)
{
// Reset the counter and signal the waiting thread.
invokeCount = 0;
autoEvent.Set();
}
}
}
// The example displays output like the following:
// 11:59:54.202 Creating timer.
//
// 11:59:55.217 Checking status 1.
// 11:59:55.466 Checking status 2.
// 11:59:55.716 Checking status 3.
// 11:59:55.968 Checking status 4.
// 11:59:56.218 Checking status 5.
// 11:59:56.470 Checking status 6.
// 11:59:56.722 Checking status 7.
// 11:59:56.972 Checking status 8.
// 11:59:57.223 Checking status 9.
// 11:59:57.473 Checking status 10.
//
// Changing period to .5 seconds.
//
// 11:59:57.474 Checking status 1.
// 11:59:57.976 Checking status 2.
// 11:59:58.476 Checking status 3.
// 11:59:58.977 Checking status 4.
// 11:59:59.477 Checking status 5.
// 11:59:59.977 Checking status 6.
// 12:00:00.478 Checking status 7.
// 12:00:00.980 Checking status 8.
// 12:00:01.481 Checking status 9.
// 12:00:01.981 Checking status 10.
//
// Destroying timer.
Imports System.Threading
Public Module Example
Public Sub Main()
' Use an AutoResetEvent to signal the timeout threshold in the
' timer callback has been reached.
Dim autoEvent As New AutoResetEvent(False)
Dim statusChecker As New StatusChecker(10)
' Create a timer that invokes CheckStatus after one second,
' and every 1/4 second thereafter.
Console.WriteLine("{0:h:mm:ss.fff} Creating timer." & vbCrLf,
DateTime.Now)
Dim stateTimer As New Timer(AddressOf statusChecker.CheckStatus,
autoEvent, 1000, 250)
' When autoEvent signals, change the period to every half second.
autoEvent.WaitOne()
stateTimer.Change(0, 500)
Console.WriteLine(vbCrLf & "Changing period to .5 seconds." & vbCrLf)
' When autoEvent signals the second time, dispose of the timer.
autoEvent.WaitOne()
stateTimer.Dispose()
Console.WriteLine(vbCrLf & "Destroying timer.")
End Sub
End Module
Public Class StatusChecker
Dim invokeCount, maxCount As Integer
Sub New(count As Integer)
invokeCount = 0
maxCount = count
End Sub
' The timer callback method.
Sub CheckStatus(stateInfo As Object)
Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
invokeCount += 1
Console.WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.",
DateTime.Now, invokeCount)
If invokeCount = maxCount Then
' Reset the counter and signal the waiting thread.
invokeCount = 0
autoEvent.Set()
End If
End Sub
End Class
' The example displays output like the following:
' 11:59:54.202 Creating timer.
'
' 11:59:55.217 Checking status 1.
' 11:59:55.466 Checking status 2.
' 11:59:55.716 Checking status 3.
' 11:59:55.968 Checking status 4.
' 11:59:56.218 Checking status 5.
' 11:59:56.470 Checking status 6.
' 11:59:56.722 Checking status 7.
' 11:59:56.972 Checking status 8.
' 11:59:57.223 Checking status 9.
' 11:59:57.473 Checking status 10.
'
' Changing period to .5 seconds.
'
' 11:59:57.474 Checking status 1.
' 11:59:57.976 Checking status 2.
' 11:59:58.476 Checking status 3.
' 11:59:58.977 Checking status 4.
' 11:59:59.477 Checking status 5.
' 11:59:59.977 Checking status 6.
' 12:00:00.478 Checking status 7.
' 12:00:00.980 Checking status 8.
' 12:00:01.481 Checking status 9.
' 12:00:01.981 Checking status 10.
'
' Destroying timer.
설명
TimerCallback 대리자를 사용하여 Timer 실행할 메서드를 지정합니다. TimerCallback 대리자의 서명은 다음과 같습니다.
void TimerCallback(Object state)
void TimerCallback(Object state)
Sub TimerCallback(state As Object)
타이머 대리자는 타이머가 생성될 때 지정되며 변경할 수 없습니다. 이 메서드는 타이머를 만든 스레드에서 실행되지 않습니다. 시스템에서 제공하는 ThreadPool 스레드에서 실행됩니다.
팁
.NET에는 각각 다른 기능을 제공하는 여러 타이머 클래스가 포함되어 있습니다.
- System.Timers.Timer- 이벤트를 발생시키고 정기적으로 하나 이상의 이벤트 싱크에서 코드를 실행합니다. 이 클래스는 다중 스레드 환경에서 서버 기반 또는 서비스 구성 요소로 사용하기 위한 것입니다. 사용자 인터페이스가 없으며 런타임에 표시되지 않습니다.
- System.Threading.Timer- 스레드 풀 스레드에서 정기적으로 단일 콜백 메서드를 실행합니다. 콜백 메서드는 타이머가 인스턴스화되어 변경할 수 없는 경우에 정의됩니다. System.Timers.Timer 클래스와 마찬가지로 이 클래스는 다중 스레드 환경에서 서버 기반 또는 서비스 구성 요소로 사용하기 위한 것입니다. 사용자 인터페이스가 없으며 런타임에 표시되지 않습니다.
- System.Windows.Forms.Timer이벤트를 발생시키고 정기적으로 하나 이상의 이벤트 싱크에서 코드를 실행하는 Windows Forms 구성 요소입니다. 구성 요소에는 사용자 인터페이스가 없으며 단일 스레드 환경에서 사용하도록 설계되었습니다. UI 스레드에서 실행됩니다.
- System.Web.UI.Timer(.NET Framework에만 해당) 정기적으로 비동기 또는 동기 웹 페이지 포스트백을 수행하는 ASP.NET 구성 요소입니다.
-
System.Windows.Threading.DispatcherTimer
Dispatcher
큐에 통합된 타이머입니다. 이 타이머는 지정된 시간 간격으로 지정된 우선 순위로 처리됩니다.
타이머를 만들 때 메서드의 첫 번째 실행 전에 대기할 시간(기한) 및 후속 실행(기간) 사이에 대기할 시간을 지정할 수 있습니다. Timer 클래스는 시스템 클록과 동일한 해상도를 갖습니다. 즉, 마침표가 시스템 클록의 해상도보다 작으면 windows 7 및 Windows 8 시스템에서 약 15밀리초인 시스템 클록의 해상도로 정의된 간격으로 TimerCallback 대리자가 실행됩니다. Change 메서드를 사용하여 기한 및 기간을 변경하거나 타이머를 사용하지 않도록 설정할 수 있습니다.
메모
Timer사용하는 한 참조를 유지해야 합니다. 관리되는 개체와 마찬가지로 Timer 참조가 없는 경우 가비지 수집의 대상이 됩니다. Timer 여전히 활성화되어 있으므로 수집되지 않습니다.
메모
사용되는 시스템 클록은 GetTickCount사용하는 것과 동일한 클록으로, timeBeginPeriod 및 timeEndPeriod변경 내용의 영향을 받지 않습니다.
타이머가 더 이상 필요하지 않은 경우 Dispose 메서드를 사용하여 타이머가 보유한 리소스를 해제합니다. 타이머는 스레드 풀 스레드에서 실행하기 위해 콜백을 큐에 대기하기 때문에 Dispose() 메서드 오버로드가 호출된 후에 콜백이 발생할 수 있습니다. Dispose(WaitHandle) 메서드 오버로드를 사용하여 모든 콜백이 완료될 때까지 기다릴 수 있습니다.
타이머가 실행하는 콜백 메서드는 ThreadPool 스레드에서 호출되기 때문에 재진입해야 합니다. 타이머 간격이 콜백을 실행하는 데 필요한 시간보다 작거나 모든 스레드 풀 스레드가 사용 중이고 콜백이 여러 번 큐에 대기되는 경우 두 스레드 풀 스레드에서 콜백을 동시에 실행할 수 있습니다.
메모
System.Threading.Timer 콜백 메서드를 사용하고 스레드 풀 스레드에서 제공하는 간단하고 간단한 타이머입니다. 사용자 인터페이스 스레드에서 콜백이 발생하지 않으므로 Windows Forms에서 사용하지 않는 것이 좋습니다. System.Windows.Forms.Timer Windows Forms에서 사용하기에 더 적합합니다. 서버 기반 타이머 기능의 경우 이벤트를 발생시키고 추가 기능이 있는 System.Timers.Timer사용하는 것이 좋습니다.
생성자
Timer(TimerCallback) |
새로 만든 Timer 개체를 상태 개체로 사용하여 무한 기간 및 무한 기한을 사용하여 Timer 클래스의 새 인스턴스를 초기화합니다. |
Timer(TimerCallback, Object, Int32, Int32) |
32비트 부가 정수를 사용하여 시간 간격을 지정하여 |
Timer(TimerCallback, Object, Int64, Int64) |
64비트 부가 정수로 시간 간격을 측정하여 |
Timer(TimerCallback, Object, TimeSpan, TimeSpan) |
TimeSpan 값을 사용하여 시간 간격을 측정하여 |
Timer(TimerCallback, Object, UInt32, UInt32) |
32비트 부호 없는 정수로 시간 간격을 측정하여 |
속성
ActiveCount |
현재 활성 상태인 타이머 수를 가져옵니다. 활성 타이머는 나중에 특정 시점에 틱하도록 등록되며 아직 취소되지 않았습니다. |
메서드
Change(Int32, Int32) |
32비트 부가 정수로 시간 간격을 측정하여 타이머에 대한 메서드 호출 사이의 시작 시간과 간격을 변경합니다. |
Change(Int64, Int64) |
64비트 부가 정수로 시간 간격을 측정하여 타이머에 대한 메서드 호출 사이의 시작 시간과 간격을 변경합니다. |
Change(TimeSpan, TimeSpan) |
TimeSpan 값을 사용하여 시간 간격을 측정하여 타이머에 대한 메서드 호출 사이의 시작 시간과 간격을 변경합니다. |
Change(UInt32, UInt32) |
32비트 부호 없는 정수로 시간 간격을 측정하여 타이머에 대한 메서드 호출 사이의 시작 시간과 간격을 변경합니다. |
CreateObjRef(Type) |
원격 개체와 통신하는 데 사용되는 프록시를 생성하는 데 필요한 모든 관련 정보를 포함하는 개체를 만듭니다. (다음에서 상속됨 MarshalByRefObject) |
Dispose() |
Timer현재 인스턴스에서 사용하는 모든 리소스를 해제합니다. |
Dispose(WaitHandle) |
타이머가 삭제되었을 때 Timer 현재 인스턴스에서 사용하는 모든 리소스와 신호를 해제합니다. |
DisposeAsync() |
Timer현재 인스턴스에서 사용하는 모든 리소스를 해제합니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
Finalize() |
개체가 리소스를 해제하고 가비지 수집에 의해 회수되기 전에 다른 정리 작업을 수행할 수 있습니다. |
GetHashCode() |
기본 해시 함수로 사용됩니다. (다음에서 상속됨 Object) |
GetLifetimeService() |
사용되지 않음.
이 인스턴스의 수명 정책을 제어하는 현재 수명 서비스 개체를 검색합니다. (다음에서 상속됨 MarshalByRefObject) |
GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
InitializeLifetimeService() |
사용되지 않음.
이 인스턴스의 수명 정책을 제어하는 수명 서비스 개체를 가져옵니다. (다음에서 상속됨 MarshalByRefObject) |
MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
MemberwiseClone(Boolean) |
현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다. (다음에서 상속됨 MarshalByRefObject) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
확장 메서드
ConfigureAwait(IAsyncDisposable, Boolean) |
비동기 삭제 가능 파일에서 반환된 작업에 대한 대기가 수행되는 방법을 구성합니다. |
적용 대상
스레드 보안
이 형식은 스레드로부터 안전합니다.
추가 정보
- TimerCallback
- 타이머
- 관리되는 스레드 풀
.NET