2011-03-22 4 views
1

내 응용 프로그램에 부모 스레드가 있습니다. 부모 스레드의 실행을 일시 중단하면 자식 스레드는 어떻게 될지 알고 싶습니다. 실행을 계속할 것인가, 또는 일시 정지 해 친 thread가 실행을 재개 할 때까지 기다릴 것인가. 도와주세요.스레딩 C#

+0

코드를 표시하는 것이 좋습니다. – Steven

+0

왜 코드를보고 싶습니까? – jgauffin

답변

4

스레드는 실제로 부모/자식 관계가 없습니다. 일단 스레드가 시작되면 스레드를 만든 스레드와 독립적입니다.

부모 스레드에 대해 "일시 중단"이라는 단어를 사용하는 것이 걱정됩니다. 스레드 일시 중단은 일반적으로 바람직하지 않습니다. 특히 Thread.Suspend을 호출하는 경우 해당 스레드는 더 이상 사용되지 않습니다. 정확히 무엇을 의미합니까? 스레드 간 작업을 조정하려는 경우 더 좋은 방법이 있습니다.

작업을 수행하고 일시 중지되고 다시 시작되고 프로세스가 종료되는 4 개의 스레드를 보여주는 샘플 코드는 다음과 같습니다.

using System; 
using System.Threading; 

public class A 
{ 
    static void Main() 
    { 
     // Start off unpaused 
     var sharedEvent = new ManualResetEvent(true); 

     for (int i = 0; i < 4; i++) 
     { 
      string prefix = "Thread " + i; 
      Thread t = new Thread(() => DoFakeWork(prefix, 
                sharedEvent)); 
      // Let the process die when Main finished 
      t.IsBackground = true; 
      t.Start(); 
     } 
     // Let the workers work for a while 
     Thread.Sleep(3000); 
     Console.WriteLine("Pausing");   
     sharedEvent.Reset(); 

     Thread.Sleep(3000);  
     Console.WriteLine("Resuming"); 
     sharedEvent.Set(); 

     Thread.Sleep(3000); 
     Console.WriteLine("Finishing"); 
    } 

    static void DoFakeWork(string prefix, ManualResetEvent mre) 
    { 
     while (true) 
     { 
      Console.WriteLine(prefix + " working..."); 
      Thread.Sleep(500); 
      mre.WaitOne(); 
     } 
    } 
} 
+0

내 응용 프로그램에서 거대한 계산을하고 있습니다. 내 응용 프로그램에 일시 중지 단추가 있습니다. 일시 중지 단추를 클릭하면 일부 응용 프로그램이 일시 중지되고 some1이 다시 시작 단추를 클릭하면 해당 응용 프로그램이 다시 시작됩니다. 내 응용 프로그램에 상위 스레드가 있습니다. . 그리고 두 개의 다른 함수에서 나는 각 함수에 4 스레드를 시작했습니다. 나는 threadpool을 사용하고 있습니다. –

+0

@Sanchaita : 공동 작업 *을 일시 중지해야합니다. 예 : 각 작업자 스레드 내에서 일시 중지해야하는지 여부에 대한 일부 공유 부울 값을 주기적으로 확인하십시오. 아니면 그냥 ManualResetEvent를 사용하여 주기적으로 기다릴 수 있습니다. 일시 중지하면 다시 설정하고 다시 시작하면 설정합니다. –

+0

모든 스레드를 1 포인트로 가져 오기 위해 WaitOne을하고 있습니다. 구현해야 할 곳은 어디입니까? WaitOne 이전 또는 그 이전입니다. 잠깐 사용 가능합니다. –

2

스레드는 실제로 닷넷에서 부모 - 자식 관계가 없으므로 스레드 w를 일시 중단합니다. 그로 인해 생성 된 다른 스레드를 일시 중단하지 마십시오.