정확하게 5 분마다 실행하는 방법이 필요합니다. 나는 Timer가 천천히 동기화되지 않는다는 것을 알아 차렸기 때문에 Timer를 사용할 수 없습니다 (예 : 00 : 01, 00:06, 00:11, 00:16 등).Java의 timer.scheduleAtFixedRate와 동일한 C#
정확해야하지만 너무 정확하지 않아도됩니다. 매 5 분마다 +/- 1 초가 괜찮을 것이며, 달리기 하루 만 지나면 5 분간 정확하게 틱할 것입니다.
내가 지금까지 생각한 것은 1 초의 간격으로 Timer를 작성하여 DateTime.Now를 검사하여 다음 5 분 표시가 통과되는지 확인하는 것입니다. 내가 놓친 C# 라이브러리에 좀 더 우아한 솔루션이나 무언가가 있는지 궁금합니다.
편집 : 지금 내 요구 사항에 맞는 다음 템플릿이 있습니다.
public class ThreadTest
{
private Thread thread;
private long nextExecutionTime;
private long interval;
public void StartThread(long intervalInMillis)
{
interval = intervalInMillis * TimeSpan.TicksPerMillisecond;
nextExecutionTime = DateTime.Now.Ticks;
thread = new Thread(Run);
thread.Start();
}
private void Run()
{
while (true)
{
if (DateTime.Now.Ticks >= nextExecutionTime)
{
nextExecutionTime += interval;
// do stuff
}
}
}
}
System.Threading.Timer를 실제로 사용해 보셨습니까? 그것은 지정된 간격마다 새 스레드를 시작하고 나는 1 초 이상 동기화되지 않습니다. –
Timer의 유일한 문제점은 작업자 스레드가 너무 오랫동안 정지되거나 실행될 때 새로운 스레드와 새 스레드를 시작하고 응용 프로그램이 너무 많은 리소스를 소비한다는 것입니다. 그런 상황이 부적절한 경우도 있습니다. 그런 다음주기적인 러너를 직접 구현할 수 있습니다. 그렇지 않으면 타이머를 사용하십시오 –
방금 System.Threading.Timer를 1 초 간격으로 시도했는데 4 분에 230ms를 얻었습니다 – Tom