[c#] C # 스레드는 잠자기하지 않습니까?



2 Answers

매 초마다 3 초 지연으로 새 스레드를 시작합니다. 다음과 같이됩니다.

  1. 스레드 1 시작
  2. 스레드 2 시작, 스레드 1 일시 중단
  3. 쓰레드 3 시작, 쓰레드 2는 잔다, 쓰레드 1은 잔다.
  4. 스레드 4 시작, 스레드 3은 잠자기, 스레드 2는 잠자기, 스레드 1은 잠든다.
  5. 스레드 5 시작, 스레드 4는 잠자기, 스레드 3은 잠, 스레드 2는 잠자기, 스레드 1은 덤프
  6. 스레드 6 시작, 스레드 5 일시 중단, 스레드 4 일시 중단, 스레드 3 일시 중단, 스레드 2 덤프
  7. 스레드 7 시작, 스레드 6 일시적, 스레드 5 일시 중단, 스레드 4 일시 중단, 스레드 3 덤프

보시다시피, 각 스레드는 3 초 동안 휴면 상태이지만 1 초마다 덤프가 발생합니다.

스레드와 어떻게 작동합니까? 이 같은 smth :

void Main()
{
    new Thread(() => doWork()).Start();
    Console.ReadLine();
}

public void doWork()
{
    int h = 0;
    do
    {
        Thread.Sleep(3000);
        h.Dump();
        h++;
    }while(true);
}
Question

나는이 코드를 가지고 :

void Main()
{
    System.Timers.Timer t = new System.Timers.Timer (1000);
    t.Enabled=true;
    t.Elapsed+= (sender, args) =>c();
    Console.ReadLine();

}

int h=0;
public void c()
{
    h++;
    new Thread(() => doWork(h)).Start();
}

public void doWork(int h)
{
    Thread.Sleep(3000);
    h.Dump();
}

간격이 1000ms이고 작업 프로세스가 3000ms 인 경우 어떻게되는지보고 싶었습니다.

그러나 나는 이상한 행동을 보았습니다 - 3000ms 지연 은 시작시에만 발생합니다!

어떻게 각각의 doWork 시간 동안 잠을 자도록 할 수 있습니까?

여기에서 볼 수 있듯이, 처음에는 3 초의 지연이 있고, 각각 1 초씩 반복됩니다.




이 동작을 보는 이유는 간단합니다. 매초마다 새 스레드를 예약하고 결과가 3 초 후에 표시되도록합니다. 처음 4 초 동안 아무것도 보이지 않습니다. 그런 다음 3 초 전에 시작된 스레드가 덤프합니다. 다른 스레드는 그때까지 2 초 동안 자고, 또 다른 스레드는 1 초 동안 자게됩니다. 다음 두 번째 스레드 # 2 덤프; 스레드 # 3, # 4 등 - 매초마다 출력물을 얻습니다.

3 초마다 출력물을보고 싶다면 3 초마다 새로운 스레드를 예약하고 원하는 지연 시간을 설정해야합니다. 초기 스레드는 3 초 내에 출력됩니다. 모든 후속 스레드는 3 초 간격으로 실행됩니다.




각 doWork는 3 초 동안 휴면 상태이지만 1 초 간격으로 스레드를 작성하므로 휴면 상태가 겹칩니다.




Related