사람들 앞에서 제안 : 에 대해 Thread.sleep을 사용하고 있지 않습니다.을 제외하고는 해결 방법을 찾기 위해 노력하고 있습니다. 다른 사람들의 미래 코드를 처리하려고 노력하고 있습니다. 잠들지 마십시오. 나는 그것들을 동기화시키는 것이 얼마나 끔찍한 지 잘 알고있다.C#에서 수면 스레드를 깨울 수 있습니까?
내 코드 조각에 스레드를 허용합니다. 이 스레드의 수명을 제한 할 수 있기를 바랍니다. 이렇게 평소에하는 방법은 다음과 같습니다.
Thread outer = new Thread(() =>
{
externalThread.Start();
externalThread.Join();
});
outer.Start();
outer.Join(lifetime);
if (outer.ThreadState != ThreadState.Stopped)
{
outer.Abort();
}
inner.Join();
나는 잠자기가 끝나기 전에 수면 스레드를 깨울 수 없다는 것을 발견했습니다. 내가 .Abort을() 스레드 실행에 하드 제한되지 않습니다 실현이지만
new Thread(() => { Thread.Sleep(2000); Console.WriteLine("second"); })
: 나는 그것을 10 밀리 세컨드의 수명을 주면 설상가상으로, 이것은 여전히 콘솔에 기록합니다. 2 초면 경고가 될 것으로 보이지만 그렇지 않은 것 같습니다 ...
WaitSleepJoin 상태 및 .Interrupt(); 그것은 스레드를 충돌 시키거나 예외를 던집니다 (미안하지만 Windows가 디버거가 실행 중이 아니라면 충돌이 발생했다는 것을 알 수 있으며 실행중인 경우에는 인터럽트가 호출되지 않은 것처럼 실행됩니다). 2 초 후 콘솔에 계속 씁니다. . .Resume()은 잠자는 스레드에 아무런 영향을주지 않습니다.
거기에 수면을 기다리는 수면을 종료하는 방법이 있습니까? Console.WriteLine이 관계없이 호출 될 수 있도록 중지하는 것이 "즉시"가 아니라는 것을 이해합니다. 그것은 나를 괴롭히는 2 초의 기다림이다. 만약 10 일간 기다려야한다면 어떨까요? 이후 들어오는 스레드를 제어 할 수 없기 때문에 나는 알 길이 없습니다. 그리고 이 그런 것을 막을 수 없습니다.
다른 사용자의 스레드에 대한 참조는 어떻게합니까? –
void myFunc (Thread externalThread) {// approx. 위의 코드} – Groxx
10 일간 기다려야하는 경우 상사에게 해당 개발자가 해고 될 수 있도록 알려주십시오. 무능한 개발자의 가능한 모든 특수성을 다루려고 시도하지 마십시오. –