C#μμ μ€λ λλ₯Ό μμ±νκ³ , μ’ λ£νλ λ°©λ²μ λν΄ μμλ³Έλ€. μ€λ λλ νλ‘κ·Έλ¨μμ μ¬λ¬ μμ μ λμμ μ€νν μ μκ² ν΄μ£Όλ μ€μν λꡬμ΄λ€. μ΄ κΈμμλ μ€λ λλ₯Ό μμ νκ³ ν¨μ¨μ μΌλ‘ μμ±νκ³ μ’ λ£νλ λ°©λ²μ λ¨κ³λ³λ‘ μμλ³Έλ€. λν μ€λ λκ° μλμΌλ‘ μ’ λ£λλλ‘ νλ μ΅μ μ λ°©λ²μ λν΄μλ μ΄ν΄λ³΄μ.
μ€λ λ μμ±νκΈ°
Thread ν΄λμ€λ System.Threading λ€μμ€νμ΄μ€μμ μ 곡λλ ν΄λμ€λ‘, μ€λ λμ μμ±, μ’ λ£, λ° μ μ΄ κΈ°λ₯μ μ 곡νλ€.
μ΄ ν΄λμ€λ₯Ό μ¬μ©νλ©΄ νλ‘κ·Έλ¨μμ λ³λ ¬λ‘ μ€νλλ μμ μ ꡬνν μ μλ€. μ£Όμ κΈ°λ₯μ λ€μκ³Ό κ°λ€.
- μ€λ λ μμ±: μλ‘μ΄ μ€λ λλ₯Ό μμ±νμ¬ λ³λ ¬λ‘ μ€νλλ μμ μ μμν μ μλ€.
- μ€λ λ μ’ λ£: μ€λ λκ° μμ μ μλ£νκ±°λ λ μ΄μ νμνμ§ μμ λ μ€λ λλ₯Ό μ’ λ£ν μ μλ€.
- μ€λ λ μ μ΄: μ€λ λμ μ°μ μμλ₯Ό μ€μ νκ±°λ, μΌμ μ€μ§νκ±°λ λ€μ μμνκ±°λ, μ€λ λ κ° ν΅μ μ μν λκΈ°ν κΈ°λ₯μ μ 곡νλ€.
public sealed class Thread
sealed ν€μλκ° ν΄λμ€ μμ λΆμ΄ μμΌλ©΄ ν΄λΉ ν΄λμ€λ λ μ΄μ λ€λ₯Έ ν΄λμ€μκ² μμλ μ μλ€. μ¦, sealed ν΄λμ€λ λ€λ₯Έ ν΄λμ€μμ μμλμ΄ νμ₯λλ κ²μ λ°©μ§νλ€. λ°λΌμ sealed ν΄λμ€λ μ£Όμ΄μ§ νμ κ·Έλλ‘ μ¬μ©ν΄μΌνλ©°, μλ‘μ΄ κΈ°λ₯μ μΆκ°νκ±°λ λ³κ²½ν μ μλ€. μ΄λ κ² ν¨μΌλ‘μ¨ ν΄λμ€μ μλλ λμμ΄λ 보μμ λ³΄λ€ κ°λ ₯νκ² μ μ§ν μ μλ€.
λ©μλ | μ€λͺ |
Abort() | ν΄λΉ μ€λ λμμ ThreadAbortExceptionμ λ°μμμΌ μ€λ λλ₯Ό κ°μ μ’ λ£νλ€. κΈκ²©ν μ’ λ£κ° μ΄λ€μ§λ―λ‘ μμ νμ§ μκ³ , μκΈ°μΉ μμ κ²°κ³Όλ₯Ό μ΄λν μ μλ€. λ°λΌμ μ¬μ©μ κΆμ₯νμ§ μλλ€. |
Join() | νΉμ μ€λ λκ° μ’ λ£λ λκΉμ§ λκΈ°νλ©΄μ νΈμΆ μ€λ λλ₯Ό μ°¨λ¨νλ€. μ£Όλ‘ λΆλͺ¨ μ€λ λκ° μμ μ€λ λμ μμ μ΄ μλ£λκΈ°λ₯Ό κΈ°λ€λ¦΄ λ μ¬μ©λλ€. μμ νκ² μ€λ λλ₯Ό μ’ λ£νκ³ μ ν λ, μ¬μ©λλ€. |
μΌμ μ€μ§λ μ€λ λλ₯Ό λ€μ μμνλ κ²μ΄ μλλΌ, μ€λ λλ₯Ό μΌμ μ€μ§ν λ€ λ€μ μμνλλ° μ¬μ©λμλ λ©μλμ΄λ€. νμ¬λ μ¬μ©λμ§ μμΌλ©°, λμ μΌμ μ€μ§λ μ€λ λλ₯Ό λ€μ μμνλ €λ©΄ λ€λ₯Έ λ©μ»€λμ¦μ μ¬μ©ν΄μΌνλ€. |
|
Sleep() | μ§μ λ μκ°λμ νμ¬ μ€λ λλ₯Ό μΌμ μ€μ§νλ€. λ€λ₯Έ μ€λ λμκ² μ μ΄λ₯Ό λκ²¨μ£Όμ΄ λ€λ₯Έ μμ μ μ²λ¦¬ν μ μλλ‘ νλ€. μ£Όλ‘ μ€λ λμ μ€νμ μΌμ μ€μ§νκ³ , κ΅μ°© μνλ₯Ό λ°©μ§νκ³ μ ν λ μ¬μ©λλ€. |
Start() | νμ¬ μ€λ λ κ°μ²΄λ₯Ό λμ(Running)μνλ‘ λ³κ²½νμ¬ μ€λ λλ₯Ό μμνλ€. |
νμ¬ λμνκ³ μλ μ€λ λλ₯Ό μΌμ μ€μ§νλ λ©μλμ΄μλ§, νμ¬λ μ¬μ©λμ§ μλλ€. |
μ€λ λ μμ±λ³΄λ€ μ’ λ£κ° λ μ΄λ €μ΄λ°, μμ ν μ’ λ£λ₯Ό μν΄μ μ μ ν νμ΄λ°κ³Ό λ°©λ²μ μ ννλ κ²μ΄ μ€μνλ€.
ThreadStart λΈλ¦¬κ²μ΄νΈ
ThreadStart λΈλ¦¬κ²μ΄νΈλ μ€λ λμμ μ€νν λ©μλλ₯Ό μ°Έμ‘°ν μ μκ² ν΄μ£Όλ C#μμ μ¬μ©λλ λΈλ¦¬κ²μ΄νΈμ΄λ€. μ΄ λΈλ¦¬κ²μ΄νΈλ νΉμ λ©μλμ κΈ°λ₯μ λ€λ₯Έ μ½λ λΈλ‘μ μμνμ¬ μ²λ¦¬νλ μν μ νλ€.
public delegate void ThreadStart();
κ°λ¨ν λ§νλ©΄, ThreadStart λΈλ¦¬κ²μ΄νΈλ μ€λ λκ° μ€νν λ©μλλ₯Ό μ§μ νκΈ° μν μΌμ’ μ ν¬μΈν° μν μ νλ€. μ΄ λΈλ¦¬μΌμ΄νΈλ₯Ό μ¬μ©νλ©΄ μ€λ λλ₯Ό μμ±ν λ μ€νν λ©μλλ₯Ό λͺ ννκ² μ§μ ν μ μλ€.
λΈλ¦¬κ²μ΄νΈλ C#μμλ§ μ¬μ©λλ κ°λ μ΄μ§λ§, λ¬Έλ²μ μΌλ‘λ λ€μ λ νΉν μ μλ€. νΉμ μμ μ μννκΈ° μν΄ λ€λ₯Έ λ©μλμ λν μ°Έμ‘°λ₯Ό μ λ¬νλ μ μ©ν λ°©λ²μ΄λ€.
μ¬λ¬ μ€λ λκ° λμΌν λ©μλλ₯Ό μ€νν΄μΌ ν λ ThreadStart λΈλ¦¬κ²μ΄νΈλ₯Ό μ¬μ©νμ¬ κ°νΈνκ² μ€λ λλ₯Ό μμ±νκ³ κ΄λ¦¬ν μ μλ€.
μ€λ λ μμ±νκΈ°
ThreadStart ts = new ThreadStart(ThreadFunction);
Thread thd = new Thread(ts)
thd.Start();
- λ¨Όμ Thread ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ€.
- μμ±μμ μ λ¬μΈμλ‘ ThreadStart λΈλ¦¬κ²μ΄νΈλ₯Ό μ λ¬νλ€. μ΄λ, ThreadStart λΈλ¦¬κ²μ΄νΈλ μ€λ λκ° μ€νν λ©μλλ₯Ό μ°Έμ‘°νλ€. μλ₯Ό λ€μ΄, `ThreadFuction`μ΄λΌλ λ©μλλ₯Ό μ€ννλ €λ©΄ `new ThreadStart(ThreadFunction)`κ³Ό κ°μ΄ μμ±νλ€.
- μμ±ν Thread κ°μ²΄λ₯Ό ν΅ν΄ μ€λ λλ₯Ό μμνλ€. μ΄λ₯Ό μν΄ `Start()`λ©μλλ₯Ό νΈμΆνλ€.
μ€λ λλ₯Ό μ¬μ©νλ κ³Όμ
μ€λ λμ μ€μ²΄λ ν¨μμ΄λ€. μ¬λ¬ μμ μ λμμ μ€ννκΈ° μν΄ μ¬μ©λλ ν¨μλ‘, μΌμ’ μ νΉμ κΈ°λ₯μ λ 립μ μΌλ‘ μ¬μ©ν μ μλλ‘ ν΄μ€λ€.
μ€λ λλ₯Ό μ¬μ©νλ κ³Όμ μ κ°λ¨ν μ 리νλ©΄ λ€μκ³Ό κ°λ€.
- μ€λ λ ν¨μ μ μ: μ€λ λκ° μ€νν ν¨μλ₯Ό μ μνλ€. μ΄ ν¨μλ μ€λ λκ° λ 립μ μΌλ‘ μ€νν μμ μ ν¬ν¨νλ€.
- λΈλ¦¬κ²μ΄νΈ μμ±: λΈλ¦¬κ²μ΄νΈλ₯Ό μμ±νμ¬ μ€λ λ ν¨μλ₯Ό μ°Έμ‘°νλ€. λΈλ¦¬κ²μ΄νΈλ νΉμ ν¨μμ μ°Έμ‘°λ₯Ό μ μ₯νλλ° μ¬μ©λλ€.
- μ€λ λ κ°μ²΄ μμ±: Thread ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νλ€. μ΄λ, μμ±μλ‘ μ€λ λ ν¨μλ₯Ό κ°λ¦¬ν€λ λΈλ¦¬κ²μ΄νΈλ₯Ό μ λ¬νλ€.
- μ€λ λ μμ: μμ±ν μ€λ λ κ°μ²΄μ Start() λ©μλλ₯Ό νΈμΆνμ¬ μ€λ λλ₯Ό μμνλ€. μ΄λ₯Ό ν΅ν΄ μ€λ λκ° ν΄λΉ ν¨μλ₯Ό μ€ννκ² λλ€.
μ΄λ κ² μ€λ λλ₯Ό μμ±νκ³ , μ€νν¨μΌλ‘μ¨ μ¬λ¬ μμ μ λμμ μ²λ¦¬ν μ μκ² λλ€.
μ€λ λ μμ±νκΈ°
λ©μΈ ν¨μκ° μ£Ό μ€λ λμ΄λ€. λ©μΈν¨μκ° μμλλ©΄, μ£Ό μ€λ λκ° μμλκ²μ΄λ€. λ©μΈν¨μκ° μ’ λ£λλ©΄, μ£Ό μ€λ λκ° μ’ λ£λ μμ μ΄λ€. μ£Ό μ€λ λ μμμ νμμ μν΄ μ컀 μ€λ λλ₯Ό μμ±ν μ μλ€.
μ€λ λκ° μμ± λ° λμνλ ꡬ쑰 ποΈ
1. μ€λ λ ν¨μ λ§λ€κΈ°
λ©μΈμ€λ λμ λ 립μ μΌλ‘ λ§λ€μ΄μΌνλκΉ, μΈλΆμμ λ§λ€λ©΄ λλ€.
ThreadFunction() μ μ€λ λ κΈ°λ₯μ΄ λλ κ²μΌλ‘ λ³΄ν΅ μ€λ λλ λ°λ³΅ μμ μ νκΈ° λλ¬Έμ 무ν 루νλ₯Ό λ§λ λ€.
μΌλ° μ½λμμλ 10λ²λ§ λ리λλ‘νκ² λ€.
public static void ThreadFunction()
{
int count = 0;
while(count < 10)
{
count++;
Console.WriteLine("μ€λ λ λμμ€...");
}
}
2. λΈλ¦¬κ²μ΄νΈλ‘ λ±λ‘νκΈ°
μνΈλ¦¬ ν¬μΈνΈκ° λ©μΈμ΄λ€. λ©μΈ μμμ λ§λ€λλ‘ νλ€. μ΄ λΈλ¦¬κ²μ΄νΈλ‘ ν¨μλ₯Ό λ±λ‘νκ³ , κ°μ²΄λ₯Ό μμ±νλ€.
tsλ ThredStart λΈλ¦¬κ²μ΄νΈ κ°μ²΄μ΄λ€. μ΄ λΈλ¦¬κ²μ΄νΈλ μ€λ λ ν΄λμ€μ΄κ³ μ μμ±μμ μ λ¬λμ΄, μ€λ λκ° μ€νν λ©μλλ₯Ό μ§μ νλ€.
static void Main(string[] args)
{
Console.WriteLine("μ£Ό μ€λ λ μμ");
// 2. λΈλ¦¬κ²μ΄νΈλ‘ λ±λ‘νκΈ°
ThreadStart ts = new ThreadStart(ThreadFunction);
// 3. μ€λ λ κ°μ²΄μμ±
Thread thd = new Thread(ts);
Console.WriteLine("μ£Ό μ€λ λ μ’
λ£");
}
3. μ€λ λ κ°μ²΄ μμ±
`Thred` ν΄λμ€λ seadledλ‘ μ μΈλμ΄ μμ΄ μμνμ§ λͺ»νλλ‘ λμ΄μλ€. μ΄ λ§μ `Thread`ν΄λμ€λ₯Ό μμνμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€ μ μλ€λ μλ―Έμ΄λ€.
4. μ€λ λ μμ
thd.Start() λ©μλλ₯Ό νΈμΆνμ¬ μ컀 μ€λ λλ₯Ό μμνλ€. μ컀 μ€λ λ μνκ° RunningμΌλ‘ μΆλ ₯λλ€.
μ컀 μ€λ λκ° μμμ΄ λμλλ°, "μ£Ό μ€λ λ μ’ λ£"λ λ©μΈμ΄ μ’ λ£κ° λμλ€λ κ²μΌλ‘ μ£Ό μ€λ λλ μ’ λ£λμμ§λ§
μ컀μ€λ λλ λ 립μ μΌλ‘ κ³μ μ€νλλ€.
static void Main(string[] args)
{
Console.WriteLine("μ£Ό μ€λ λ μμ");
// 2. λΈλ¦¬κ²μ΄νΈλ‘ λ±λ‘νκΈ°
ThreadStart ts = new ThreadStart(ThreadFunction);
// 3. μ€λ λ κ°μ²΄μμ±
Thread thd = new Thread(ts);
// 4. μ€λ λ μμ
thd.Start();
Console.WriteLine("μ컀 μ€λ λ μμ: " + thd.ThreadState.ToString());
Console.WriteLine("μ£Ό μ€λ λ μ’
λ£");
}
λμμ μ€νλκΈ° λλ¬Έμ μνμ€κ° μλ‘ λ§μ§ μλ€. λμμ λμκ°.
μ€λ λ μλ μ’ λ£
μ€λ λ μ’ λ£ μ κ°μ₯ μ’μ λ°©λ²μ μλμΌλ‘ μ’ λ£λλλ‘ νλ κ²μ΄λ€. μ΄λ κ°μ₯ μμ ν λ°©λ²μ΄κ³ , μ€λ λκ° μ ν΄μ§ μμ μ μλ£νλ©΄ μ€μ€λ‘ μ’ λ£λλ ꡬ쑰λ₯Ό μλ―Ένλ€. μλ μ’ λ£λ μ€λ λκ° 10λ² λ°λ³΅ μμ μ μνν ν μμ νκ² μ’ λ£λλ μμ μ²λΌ μ€λ λκ° νΉμ 쑰건μ λ§μ‘±ν λ μμ°μ€λ½κ² μ’ λ£λλλ‘ νλκ²μ΄λ€. μ΄λ μ€λ λλ₯Ό μ μ΄νκ±°λ κ°μ λ‘ μ’ λ£νλ κ²λ³΄λ€ μΌλ°μ μ΄κ³ κΆμ₯λλ λ°©λ²μ΄λ€.
public static void ThreadFunction()
{
int count = 0;
while (count < 10)
{
// μ½λ
}
}
μ€λ λ κ°μ μ’ λ£
μ€λ λλ₯Ό κ°μ λ‘ μ’ λ£ν΄μΌν λκ° μλ€. μ€λ λλ₯Ό μΈλΆμμ κ°μ μ’ λ£ν΄μΌ νλ κ²½μ° Abort()λ©μλλ₯Ό μ¬μ©νλ€. Abort()λ©μλκ° νΈμΆλλ©΄ λ΄λΆμ μΌλ‘ ThreadAbortException κ°μ μμΈλ₯Ό λ°μμμΌ μ’ λ£νλ€. μ΄λ κΆμ₯νμ§ μλλ€.
public void Abort();
κ°μ μμΈ μ’ λ£
μμΈ μ’ λ£ μ Abortλ₯Ό μ¬μ©ν΄μ κ°μ μ’ λ£λλ€. try catchλ¬ΈμΌλ‘ νμΈν΄λ³΄μ.
κ°μ μ’ λ£ν λ μ΄λ° μμΈκ° λ°μν μ μλ€λ κ². e. νλ©΄ κ΄λ ¨ λ©μΈμ§ μμ€λ₯Ό μΆλ ₯ν μ μλ€. eλ₯Ό κ·Έλλ‘ μΆλ ₯νλ€.
public static void ThreadFunction()
{
// μ€λ λμμ μ€νν μμ
try
{
int count = 0;
while (count < 1000)
{
count++;
Console.WriteLine("μ€λ λ λμμ€...");
}
}
catch (ThreadAbortException e)
{
Console.WriteLine("Abort μμΈ λ°μ: " + e);
}
finally
{
Console.WriteLine("finally");
}
}
λ©μΈμμ μ컀μ€λ λλ₯Ό μ’ λ£λ₯Ό μμΌλ³΄λλ‘νλ€. Thread.Sleep(100) 0.1μ΄ intervelμ μ€λ€. κ°μ λ‘ Abortν¨μλ₯Ό νΈμΆνλ€.
1000λ² μ€λ λ λμμ μΆλ ₯νλ€κ° κ°μ Abort() λ©μλ νΈμΆλλ©΄ μ€λ λκ° μ€μ§λλ€.
static void Main(string[] args)
{
Console.WriteLine("μ£Ό μ€λ λ μμ");
// 2. λΈλ¦¬κ²μ΄νΈλ‘ λ±λ‘νκΈ°
ThreadStart ts = new ThreadStart(ThreadFunction);
// 3. μ€λ λ κ°μ²΄μμ±
Thread thd = new Thread(ts);
// 4. μ€λ λ μμ
thd.Start();
Console.WriteLine("μ컀 μ€λ λ μμ: " + thd.ThreadState.ToString());
Console.WriteLine("μ£Ό μ€λ λ μ’
λ£");
Thread.Sleep(100);
thd.Abort();
}
μ€λ λλ₯Ό 컨νΈλ‘€νλ λ‘μ§μμ κ°μ μ’ λ£λμ catchλ¬Έμ νλ€. μμΈμ²λ¦¬λ₯Ό ν΄μ£Όκ³ , ThreadAbortExceptionμ ν΄μ£Όλ κ²μ΄ μμ νλ€.
μ€λ λμ μ°μν μ’ λ£
μμ μ μΌλ‘ μ€λ λλ₯Ό μ μ μ’ λ£νλ λ°©λ²μ Join λ©μλ μ¬μ©νλ©΄ λλ€. μ€λ λκ° λ€ μ€νλ λκΉμ§ κΈ°λ€λ Έλ€κ° μ’ λ£μν€λ―λ‘ λ§€μ° μμ μ μ΄λ€.
public void Join();
Abortλ μ€λΉλμ§μμ μνμμ κ°μ λ‘ μ’ λ£ν λ μ¬μ©νκ³ , Joinμ μ€λ λκ° λ€ μ€νλ λκΉμ§ κΈ°λ€λ €μ€¬λ€κ° μ’ λ£νλ€.
C++μμλ κ°μ μ’ λ£, μ°μν μ’ λ£ μ²λ¦¬νλ κ²μ΄ κΉλ€λ‘λ€.
static void Main(string[] args)
{
Console.WriteLine("μ£Ό μ€λ λ μμ");
// 2. λΈλ¦¬κ²μ΄νΈλ‘ λ±λ‘νκΈ°
ThreadStart ts = new ThreadStart(ThreadFunction);
// 3. μ€λ λ κ°μ²΄μμ±
Thread thd = new Thread(ts);
// 4. μ€λ λ μμ
thd.Start();
Console.WriteLine("μ컀 μ€λ λ μμ: " + thd.ThreadState.ToString());
Console.WriteLine("μ£Ό μ€λ λ μ’
λ£");
Thread.Sleep(100);
thd.Join();
}
Abort()λ₯Ό μ¬μ©νμ λλ μ€κ°μ μμΈκ° λ°μνλλ°, Join()μ μ’ λ£λκΈ° μ κΉμ§ λκΉμ§ κΈ°λ€λ €μ£Όκ³ μ μ μ’ λ£κ° λλ€. μ€λ λλ₯Ό μ°μνκ² μ’ λ£νλ λ°©λ²μ΄λ€.
'C#' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C#] String.IsNullOrEmpty() μ μ λ©μλλ (0) | 2024.12.15 |
---|---|
[C#] λ€μν λ°μ΄ν° νμμ μ²λ¦¬νλ μΌλ°ν νλ‘κ·Έλλ° (0) | 2024.09.01 |
[C#] νλ‘μΈμ€μ μ€λ λμ κ°λ - Main μ€λ λ μ 보 μΆλ ₯νκΈ° (1) | 2024.06.02 |
[C#] κ·Έλν½ GDI+ κ°λ κ³Ό κ°λ¨ν λν 그리기 (0) | 2024.05.22 |
[C#] μ±κΈν€ ν¨ν΄ μ΄ν΄νκΈ° - C++, C# λΉκ΅ (1) | 2024.05.21 |