using System;
using System.Diagnostics;
namespace ThreadInfoWirte
{
class Program
{
static void Main(string[] args)
{
Process proc = Process.GetCurrentProcess();
ProcessThreadCollection ptc = proc.Threads;
Console.WriteLine("현재 프로세스에서 실행중인 스레드 수 : {0}", ptc.Count);
ThreadInfo(ptc);
}
private static void ThreadInfo(ProcessThreadCollection ptc)
{
int i = 1;
foreach (ProcessThread pt in ptc)
{
Console.WriteLine("******* {0} 번째 스레드 정보 *******", i++);
Console.WriteLine("ThreadId : {0}", pt.Id); //스레드 ID
Console.WriteLine("시작시간 : {0}", pt.StartTime); //스레드 시작시간
Console.WriteLine("우선순위 : {0}", pt.BasePriority); //스레드 우선순위
Console.WriteLine("상태 : {0}", pt.ThreadState); //스레드 상태
Console.WriteLine();
}
}
}
}
위에서 보는 바와 같이 현재 프로세스의 정보를 받아오고 그 프로세스의 실행중인 스레드의 정보를 가져오는 것입니다. 그때 쓰는 클래스는 ProcessThreadCollection 이지요. 만약 모든 프로세스의 스레드를 가져 온다고 한다면 GetProcess로 모든 프로세스의 정보를 받고, 반복문으로 돌리면서 각 프로세스 마다 Thread정보를 받아 와야겠지요.계획에는 없었는데 한번 예제를 보여드리도록 하겠습니다 ^^
using System;
using System.Diagnostics;
using System.Threading;
namespace ThreadInfoWirte
{
class Program
{
static void Main(string[] args)
{
try
{
Process[] allProc = Process.GetProcesses();
Console.WriteLine("현재 실행중은 모든 프로세스 수 : {0}", allProc.Length);
int i = 1;
foreach (Process p in allProc)
{
Console.WriteLine("***** {0}번째 프로세스 ******", i++);
Console.WriteLine("프로세스 이름 : {0}", p.ProcessName);
Console.WriteLine();
ProcessThreadCollection ptc = p.Threads;
ThreadInfo(ptc);
Console.WriteLine();
Thread.Sleep(2000);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static void ThreadInfo(ProcessThreadCollection ptc)
{
int i = 1;
foreach (ProcessThread pt in ptc)
{
Console.WriteLine("******* {0} 번째 스레드 정보 *******", i++);
Console.WriteLine("ThreadId : {0}", pt.Id); //스레드 ID
Console.WriteLine("시작시간 : {0}", pt.StartTime); //스레드 시작시간
Console.WriteLine("우선순위 : {0}", pt.BasePriority); //스레드 우선순위
Console.WriteLine("상태 : {0}", pt.ThreadState); //스레드 상태
Console.WriteLine();
}
}
}
}
어제 구현 해보았던 프로세스 정보를 가져오는 소스와 스레드 정보를 가져오는 소스를 합쳐놓은 것입니다. 각 프로세스의 이름을 가져오고 그 프로세스의 모든 스레드 정보를 가져오고 Sleep 메소드로2초 동안 쉬게 해서 한 프로세스의 스레드를 확인 할 수 있도록 구현해 보았습니다. 생각보다 쉽게 구현이 가능하죠.
어떠셨나요? 프로세스와 스레드의 정보를 가져와서 확인해 보았는데요. 프로세스나 스레드 정보를 확인할 수 있다면 변경도 할 수 있을것입니다. 그것에 대해서 한번 연구해 보시는것이 어떨까요?
다음에는 간단히 try~catch문에 대해서 살펴 보도록 하겠습니다 ^^
감사합니다
참고 자료 : C# Programming Bible
'.NET > C#' 카테고리의 다른 글
try~catch문(예외처리) (3) | 2010.10.14 |
---|---|
C# 소수(Prime Number) 찾기 (0) | 2010.10.12 |
C# 프로세스 목록 알아오기 (1) | 2010.10.11 |
Thread 란? (0) | 2010.10.10 |
Windows Forms의 시작 (2) | 2010.01.19 |
C# Event (0) | 2010.01.18 |
C# delegate (0) | 2010.01.14 |
FileAndDirectory (0) | 2010.01.12 |
C# File Input/Output (1) | 2009.12.24 |
C# Collection (0) | 2009.12.21 |