출처 : http://blog.naver.com/prokyhsigma?Redirect=Log&logNo=120109045619
스레드함수.cs
class ThreadTest
{
// 스레드 동기화 및 일시정지, 재시작
private ManualResetEvent _shutdownEvent = new
ManualResetEvent(false);
private ManualResetEvent _pauseEvent = new
ManualResetEvent(false);
private Thread m_thread;
public ThreadTest()
{
m_thread = new
Thread(new ThreadStart(threadFunc));
m_thread.Name =
"test";
m_thread.IsBackground = true;
m_thread.Start();
}
private void threadFunc()
{
int i =
0;
while(_pauseEvent.WaitOne())
{
System.Diagnostics.Trace.WriteLine(i.ToString());
i++;
Thread.Sleep(1000);
}
}
//
--------------------------------------------------------------------------------
// 스레드 일시정지
//
--------------------------------------------------------------------------------
public void pause()
{
_pauseEvent.Reset();
}//end pause()
//
--------------------------------------------------------------------------------
// 스레드 재시작
//
--------------------------------------------------------------------------------
public void resume()
{
_pauseEvent.Set();
}//end resume()
//
--------------------------------------------------------------------------------
// 스레드 종료 준비, 동기화 이벤트 처리
//
--------------------------------------------------------------------------------
public void readyEndThread()
{
_shutdownEvent.Set();
_pauseEvent.Set();
}//end
endThread()
}
}
메인.cs
static void Main(string[] args)
{
ThreadTest test =
new ThreadTest();
test.resume();
Thread.Sleep(3000);
test.pause();
Thread.Sleep(3000);
test.resume();
Thread.Sleep(30000);
}
메인 클래스에서 스레드 함수를 자유롭게 통제 가능해진다.
결과> 1, 2, 3 출력 후 3초 뒤 다시 4, 5, 6 다시 3초뒤 나머지 30초동안 뒷 숫자가 출력이 된다.
[ 주의점 ]
1. 이벤트 초기값 false로 스레드를 처음부터 일시정지 시켜놓을 수 있다. true면 바로 시작.
2. 반복문의 조건을 _pauseEvent.WaitOne()) 으로 두어서 신호를 반복문 제어값으로 해놓는다.
'강좌 > C#' 카테고리의 다른 글
C# 네트웍 프로그래밍 관련 코딩 팁 (0) | 2012.01.22 |
---|---|
IEnumerable, IEnumerator (0) | 2012.01.21 |
C# _ 멀티스레드,ManualResetEvent,동기화 를 시켜보자 (0) | 2012.01.21 |
스레드 동기화를 위한 AutoResetEvent와 ManualResetEvent (0) | 2012.01.21 |
_문자열 마샬링 (0) | 2012.01.21 |