본문 바로가기
C#

쓰레드

by 캡틴노랑이 2015. 8. 19.
반응형

Thread의 주요 메서드

Abort()     스레드를 종료 프로세스를 실행시켜 강제 종료합니다. 
Interrupt() WaitSleepJoin 스레드 상태 즉, 대기 중인 스레드를 중단합니다.
Join()      스레드가 종료될 때까지 호출 스레드를 차단합니다. 
Sleep()     지정된 시간(밀리초)동안 스레드를 쉬게 합니다.
Start()     현재 스레드의 상태를 Running으로 변경합니다.(스레드 시작)

 

 

http://msdn.microsoft.com/ko-kr/library/ms173178(v=vs.80).aspx

 

스레드 예제

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace threadSample
{
    public class RunnerRank
    {
        protected int _isCnt;
        protected static int[,] _RunnerCnt = new int[10,2];
        protected int runnerNo;
   

        protected static bool rankOrderby = false;
       
        protected ManualResetEvent _mrEvent;

        public int nRank {
            get {
                if (!rankOrderby)
                    TopRank();

                for(int i =0; i< 10; i++)
                    if(_RunnerCnt[i,0] == runnerNo)
                        return i;

                return 0;
                }
        }

        public RunnerRank( ManualResetEvent mrEvent)
        {
          
            _mrEvent = mrEvent;
        }

        public void ThreadPoolCallBack(object threadContext)
        {
            runnerNo = (int)threadContext;
            Console.WriteLine("Runner{0}Start", runnerNo);
            _RunnerCnt[runnerNo, 1] = Running();
            _RunnerCnt[runnerNo, 0] = runnerNo;

            Console.WriteLine("Runner{0}Goal, COUNT:{1}", runnerNo, _RunnerCnt[runnerNo, 1]);
            _mrEvent.Set();
        }

        protected int Running()
        {
            Random r = new Random(DateTime.Now.Millisecond);
            Console.WriteLine("{0}", DateTime.Now.Millisecond);
           
            int distance = 0;
            int cnt = 0;
            int goal = 1000000;
            while (goal > distance)
            {
                distance += r.Next(0, 1000);
                cnt++;
            }
            return cnt;
        }

        public void TopRank()
        {
            int[] temp = new int[2];           

            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10 - i; j++)
                {
                    if (i != j)
                    {
                        if (_RunnerCnt[i, 1] > _RunnerCnt[j, 1])
                        {
                            temp[0] = _RunnerCnt[i, 0];
                            temp[1] = _RunnerCnt[i, 1];
                            _RunnerCnt[i, 0] = _RunnerCnt[j, 0];
                            _RunnerCnt[i, 1] = _RunnerCnt[j, 1];
                            _RunnerCnt[j, 1] = temp[0];
                            _RunnerCnt[j, 0] = temp[0];
                        }
                    }
                }
            }
        }

       
    }

    class RunRank
    {
        public static void Main(string[] args)
        {
            const int RunnerCnt = 10;
            RunnerRank[] rr = new RunnerRank[RunnerCnt];
            ManualResetEvent[] mrEvent = new ManualResetEvent[RunnerCnt];

            Console.WriteLine("Runner{0}Waiting", RunnerCnt);

            for (int i = 0; i < RunnerCnt; i++)
            {
               

                mrEvent[i] = new ManualResetEvent(false);
                RunnerRank runner = new RunnerRank(mrEvent[i]);
                rr[i] = runner;
                ThreadPool.QueueUserWorkItem(runner.ThreadPoolCallBack, i);
            }

            WaitHandle.WaitAll(mrEvent);
            Console.WriteLine("Complete");

           
            for (int i = 0; i < RunnerCnt; i++)
            {
                RunnerRank r = rr[i];
                Console.WriteLine("No.{0}is Runner is Rank{1}", i, r.nRank);
            }

        }
    }
}

 

 

쓰레드 관련 참고 사이트

http://kuimoani.tistory.com/entry/C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EB%8F%99%EA%B8%B0%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-AutoResetEvent%EC%99%80-ManualResetEvent

반응형

'C#' 카테고리의 다른 글

파일 생성 개발 프로세스  (0) 2015.08.19
is연산자와 as 연산자  (0) 2015.08.19
.net 코딩 가이드 라인  (0) 2015.08.19
숫자 형식 표현 표  (0) 2015.08.19
레지스트리(등록,추가삭제)  (0) 2015.08.19

댓글