아래는 두개의 Thread가 공동의 instance를 사용한 예제이다. Foo 클래스 인스턴스인 foo를 공동으로 사용한 두개의 thread가 실행되었다. using System; using System.Threading; namespace ThreadTest { class Program { static void Main(string[] args) { Foo foo = new Foo(); new Thread(foo.Go).Start(); foo.Go(); } } class Foo { private int count = 0; public void Go() { for (int i = 0; i < 5; i++) { count++; Console.WriteLine(count); } } } } 실행 결과 화면은 ..
아래 예제는 Thread를 간단하게 시작하는 방법을 사용한 것이다. 단 한줄로 Thread를 시작한다. using System; using System.Threading; namespace ThreadTest { class Program { static void Main(string[] args) { new Thread(Go).Start(); // Call Go() on a new thread Go(); // Call Go() on the main thread } static void Go() { for (int i = 0; i < 5; i++) Console.WriteLine(i); } } } 아래는 실행 결과 화면이다.
하나의 Thread가 실행되는 도중, 다른 Thread가 완료되기를 기다려야할 때가 있다. 이때 사용할 수 있는 것이 Join method이다. Join method는 지정된 Thread가 끝날 때까지 기다리라는 명령어이다. 아래의 예제를 보자. using System; using System.Threading; namespace JoinTest { class Program { static void Main(string[] args) { Thread worker = new Thread(new ThreadStart(DoWork)); worker.Start(); worker.Join(); Console.WriteLine("Done"); } static void DoWork() { for (int i = 0;..
Thread를 중지시키기 위해서 Abort method를 사용할 수 있다. Abort method 로 thread 를 중지시키면 ThreadAbortException 이 발생한다. 아래 예제는 ThreadAbortException 을 발생시키는 예제이다. thread 가 실행되는 도중 enter 키를 누르면, thread 가 정지되고, ThreadAbortException 이 발생한다. using System; using System.Threading; namespace AbortThreads { class Program { static void Main(string[] args) { Thread.CurrentThread.Name = "MAIN"; PrintMessage("Application Start..
앞 예제에서는 Monitor 클래스를 사용해서 object를 lock 시켰다. 이번에는 lock keyword를 사용해보자. lock keyword를 사용하면 Monitor를 사용하는 것보다 안전하고 간편하게 thread를 사용할 수 있다. 아래 예제를 보자. 예제에서 보면 Monitor.Enter 와 Monitor.Exit 대신 lock 블럭으로 감싸준 것을 알 수 있다. using System; using System.Collections.Generic; using System.Threading; namespace ThreadSample { class Program { private static Queue myQueue = new Queue(); static void Main(string[] args..
Monitor.Enter 와 Monitor.Exit 샘플코드이다. Monitor.Enter 로 필요한 object를 lock 시킨다. Monitor.Enter 로 lock 시킨 object 는 Monitor.Exit로 풀어준다. 아래 코드에서 주의할 것이 하나 있는데, 바로 foreach 문이다. foreach 문이 완료되기 전에 대상 object 의 내용이 변해서는 안되다. 그래서 foreach 문은 그 앞뒤에 Monitor.Enter 와 Monitor.Exit 를 넣었다. using System; using System.Collections.Generic; using System.Threading; namespace ThreadSample { class Program { private static Q..
C# 2.0 에서는 ThreadStart delegate를 사용하지 않아도 된다. 아래 예제를 보자. 아래 예제는 앞 예제와 같은 것이다. 하지만 ThreadStart delegate를 사용하지 않았다. using System; using System.Threading; namespace ThreadSample { class Program { public const int Repetitions = 1000; static void Main(string[] args) { Thread myThread = new Thread(DoWork); myThread.Start(); for (int count = 0; count < Repetitions; count++) { Console.Write('-'); } myTh..
Thread 간에 서로 얼마자 자주 interupt 가 일어나는지를 알 수 있는 샘플 코드이다. 두개의 thread가 화면에 점과 대쉬를 표시한다. 결과 화면을 보면 인터럽트의 정도를 확인할 수 있다. using System; using System.Threading; namespace ThreadSample { class Program { public const int Repetitions = 1000; static void Main(string[] args) { ThreadStart myThreadStart = new ThreadStart(DoWork); Thread myThread = new Thread(myThreadStart); myThread.Start(); for (int count = 0;..
이 예제는 앞의 예제를 약간 변형한 것이다. Thread와 FileStream을 동시에 사용해보았다. FileStream 에서 FileMode.Append, FileAccess.Write, FileShare.Write 를 사용해서 복수개의 Thread가 File에 접근할 수 있도록했다. FileShare.Write 옵션을 사용하지 않으면, Exception이 발생한다. 이 부분을 이해하는 것이 중요하다. 아래는 코드이다. using System; using System.Threading; using System.IO; using System.Text; public class NameUsingThread { private int time; private Thread thread; public NameUsi..
Thread에 관한 3번째 샘플 코드이다. 이 샘플 코드는 Thread를 3개 실행 시키는 것이다. using System; using System.Threading; public class NameUsingThread { private int time; private Thread thread; public NameUsingThread(String n, int t) { time = t; thread = new Thread(new ThreadStart(Run)); thread.Name = n; thread.Start(); } public void Run() { for (int i = 1; i
- Total
- Today
- Yesterday
- AdSense감추기
- AdSense숨기기
- windows
- iTextSharp
- java
- download.com
- Phalanger
- ScreenHunter
- registry
- c#
- .net framework
- Rollback Rx
- Automation
- Service pack
- WinAutomation
- autohotkey
- Microsoft
- READYSTATE_COMPLETE
- 애드센스숨기기
- 유틸리티
- iText
- AxWebBrowser
- jre
- tagREADYSTATE
- Sample Code
- DotNetMagic
- 애드센스감추기
- 스크린캡쳐
- Regular Expressions
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |