스레드가 X 초 이상 실행될 때 뭔가를 할 수있는 논리가 필요합니다. 이 믿을 수 없을 정도로 추악한 예에서, 여기가 매초을 확인하고 workerThread
10 분 이상 실행중인 경우이 메시지가 표시처럼스레드가 실행 된 시간을 확인하십시오.
...
var timeWorking = TimeSpan.FromMinutes(0);
workerThread = new Thread(RunTask);
workerThread.Start(task);
while (workerThread.IsAlive)
{
Thread.Sleep(TimeSpan.FromSeconds(1));
timeWorking = timeWorking.Add(TimeSpan.FromSeconds(1));
if (timeWorking.TotalMinutes < 10) continue;
timeWorking = TimeSpan.FromMinutes(0);
Console.Writeline("Here we go... the event")
}
나 바로를 만들기 위해 도와주세요. .. 무엇을 사용해야합니까? Diagnostics.StopWatch
, System.Timers.Timer
또는 Threading.Timer
?
UPD : 모든 해답이 날 더 혼란 ...
작업은 workerThread
시간의 X 금액 이상 실행되고 있는지 확인하는 것입니다,하고 있는지, 어떤 메소드를 호출 타이머를 재설정 마지막으로 우리가 메서드를 호출 한 이후로 X 시간이 넘는 시간 동안 workerThread
이 실행되고 있는지 다시 확인하십시오 ... 등등 ...
UPD2 : 기본적으로 나는 기반 처리를 수행하는 스레드가 있습니다. AmazonSQS 대기열에서 가져온 정보. SQS 대기열 메시지에 가시성 제한 시간이 있습니다. 작업이 기본 표시 시간 초과보다 오래 걸리는 경우 작업이 완료되기 전에 메시지가 대기열로 돌아갑니다. 그런 다음 다른 컴퓨터에서 가져옵니다. 이를 방지하려면 SQS 메시지의 가시성 타임 아웃을 연장해야합니다. 그럼 스레드주기가 isALive
인지 주기적으로 확인하여 메시지 표시 시간 초과에 몇 분을 추가 할 수 있습니다. 1 분 50 초 정도 지나면 다시 검사해야하고 스레드가 여전히 isALive
이면 몇 분 정도 더 추가해야합니다.
현재 샘플에서와 같이 시간 스레드에서 CPU (실행 예정) 또는 경과 시간을 사용 하시겠습니까? –
사이드 노트 : 정확한 지연을 제공하기 위해 잠을 기다리는 것은 잘못된 가정입니다. 잠자기는 요청한 시간 전에 스레드가 깨어나지 않을 것이므로 시간이 오래 걸릴 수 있습니다 - 따라서 "timeWorking"에 초를 추가하면 항상 실제 경과 시간이 짧아집니다 시각. –