SW 개발 공부/C#
C# Thread
Maison
2023. 10. 11. 11:00
<1. Thread >
<2. Thread의 메서드를 델리게이트로 지정하는 방법 >
<3. 델리게이트란? >
Thread 기본 사용법
- Thread 클래스의 생성자에 실행하고자 하는 메서드를 델리게이트로 지정한 후, Thread 클래스 객체에서 Start() 메서드를 호출하면 새로운 쓰레드가 생성되어 실행되게 된다.
Thread t1 = new Thread(new ThreadStart(Run));
t1.Start();
void Run(){
Console.WriteLine("RUN");
}
Thread 실행 예제
<2. Thread의 메서드를 델리게이트로 지정하는 방법 >
- Thread를 구동시키기 위해선 Thread가 구동할 메서드를 갖고 있어야한다.
- Thread를 생성할시 델리게이트로 메서드를 할당받아야한다.
- Thread는 ThreadStart로 파라미터가 없는 델리게이트와 ParameterizedThreadStart로 파라미터를 전달하는 델리게이트를 사용할 수 있다.
ParameterizedThreadStart는 public delegate void ParameterizedThreadStart(object obj); 로 정의되어있는데,
object를 전달하고 return값이 없다.
// object를 Start 메서드를 호출할때 받는다.
Thread t2 = new Thread(new ParameterizedThreadStart(Calc));
t2.Start(10.0);
//radius라는 파라미터를 object 타입으로 받아들임.
static void Calc(object radius)
{
Console.WriteLine(radius);
}
< 델리게이트 란? >
- 메서드를 참조하는 대리자.
- 메서드의 주소를 할당한 후, 델리게이트를 호출하면 할당된 메서드를 호출함.
public delegate int CustomDelegate(int a, int b);
pubic int sum(int a, int b)
{
return a+b;
}
public void Test()
{
// sum 메서드 주소를 CustomDelegate에 할당.
CustomDelegate = sum
int res = CustomDelegate(1,2);
// res = 3이 출력됨.
Console.WriteLine(res);
}
델리게이트 예제
-> 목적은 메서드를 매개변수로 사용할 수 있게 하는장치
public delegate void CustomDelegate(bool flag);
bool isLogin = false;
void Test()
{
Login();
LogOut();
}
void Login()
{
Process(isLogin,LoginCallback);
}
void LogOut()
{
Process(!isLogin,LogOutCallback);
}
void LoginCallback(bool isSuccess)
{
if(isSuccess)
isLogin=true;
Console.WriteLine("Login Status : "+isLogin);
}
void LogOutCallback(bool isSuccess)
{
if(isSuccess)
isLogin=false;
Console.WriteLine("LogOut Status : "+isLogin);
}
void Process(bool isSuccess,CustomDelegate callback)
{
callback(isSuccess);
}
델리게이트를 활용하여 메서드를 매개변수로 받은 예