본문 바로가기

.NET/C#

스레드 정보 알아오기...

728x90
반응형
이번에는 현재 실행중인 프로세스에서 작동중인 스레드의 목룩을 가져오는 코드를 보도록 하겠습니다. Process 목록을 가져오는것 만큼 간단하게 처리를 할 수 있습니다. 스레드 목록을 가져올 때도 System.Diagnostics 클래스를 참조 해줘야 된다는걸 잊으시면 안되고요 ^^

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

728x90
반응형

'.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