2016년 2월 17일 수요일

[C#] ThreadPool 이용한 멀티스레딩 방법

스레드를 이용하면 보통 Thread 클래스를 사용합니다.
소스는 보통 이렇게요.

         Thread thr = new Thread ( ( ) =>
            {
               //처리 내용
            } );
         thr.Name = "DBThread";
         thr.IsBackground = true;
         thr.Start ( );



그런데 일반적인 Thread는 시작과 종료를 사용자가 관리해주어야 합니다.


하지만 ThreadPool이라는 클래스는 스레드를 직접 스레드풀에  담아서 관리 해준다고 합니다.


그래서 사용자가 시작과 종료를 관리하지 않아도 이녀석이 알아서 해줍니다. ^^

간단한 사용방법은 아래와 같습니다.


그리고 parameters 라는 리스트에 스레드에서 사용할 인자값들을 담아서 넘겨주면 유용하겠죠?


using System;
using System.Collections.Generic;
using System.Threading;

namespace MyThreadPool
{
   public class Class1
   {
      #region Field
      int _multiThread = 10;
      #endregion

      void CallThreadPool ( )
      {
         bool isCheck = false;
         DateTime dateTime = DateTime.Now;
         List<object> parameters = new List<object> ( );

         for ( int i = 0 ; i  < _multiThread ; i++ )
         {
            parameters = new List<object> ( );
            parameters.Add ( isCheck );
            parameters.Add ( dateTime );

            //파라미터 할당 처리 ...

            ThreadPool.QueueUserWorkItem ( new WaitCallback ( GetDataFromDB ), parameters );
         }
      }

      void GetDataFromDB ( object parameters )
      {
         var args = parameters as List<object>;
         var isCheck = ( bool ) args [ 0 ];
         var dateTime = ( DateTime ) args [ 1 ];

         //함수 처리 내용...
      }
   }
}

댓글 없음:

댓글 쓰기