Microsoft MVP성태의 닷넷 이야기
글쓴 사람
spowner (spowner at naver.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기

다음 소스는 Stopwatch를 이용하여 마이크로세컨드 단위로 대기 하는 클래스를 만들어 보았습니다. (물론, CPU 점유 버젼입니다)
다른 분들께 참고하시라고 공유 드립니다.

사용법은 다음과 같습니다.

var w = Wait.Start(1000000); // 1000000 마이크로초(1초) 대기

// .. 다른 코드 : 다른 코드가 실행하면서 발생하는 지연도 반영하기 위함

w.Sleep();

---------------------------------------------------------------------------------------------------

    public class Wait
    {
        private static bool isHighResolution;
        private static long frequency;
        private ManualResetEvent re;
        private Stopwatch sw;
        private long ticks;
        private long finalTicks;


        static Wait()
        {
            isHighResolution = Stopwatch.IsHighResolution;
            frequency = Stopwatch.Frequency;
        }

        protected Wait(long microseconds)
        {
            re = new ManualResetEvent(false);

            sw = Stopwatch.StartNew();

            if (isHighResolution == false)
                throw new NotSupportHighResolutionException("System is not support high resolution frequency.");

            ticks = microseconds * frequency / 1000000;
        }

        public static Wait Start(long microseconds)
        {
            Wait result = new Wait(microseconds);
            return result;
        }

        public void Sleep()
        {
            while (sw.ElapsedTicks <= ticks)
                ;// Thread.SpinWait(100);
            //Thread.Sleep(1);
            //re.WaitOne(1);

            finalTicks = sw.ElapsedTicks;
        }

        public long TotalMicroseconds
        {
            get
            {
                return finalTicks * 1000000 / frequency;
            }
        }
    }

    public class NotSupportHighResolutionException : Exception
    {
        public NotSupportHighResolutionException(string msg)
            : base(msg)
        {
        }
    }








[최초 등록일: ]
[최종 수정일: 4/18/2015]


비밀번호

댓글 작성자
 



2015-05-20 02시50분
[이성환] 아.. 윗 글에 댓글을 달았는데 답글이 있었군요.
저랑 비슷하게 구현하셨네요. 역시 SpinWait밖에 없는 건가...;ㅅ;
[guest]

... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
854임동찬1/12/201019542이벤트 핸들러와 쓰레드의 관계 [1]
853장근배1/12/201018848압축 프로그램,, [1]
852임동찬1/6/201016232base.OnStart(agrs) [1]
851한귀순1/6/201021694oracle & transaction 질문 [5]
850박한주12/31/200918853COM과 C#간 권한 문제에 관해 여쭤봅니다. [5]
848날쌘돌이12/22/200919840C#으로 개발하는 ActiveX 디버깅 문제 [5]
847최승문12/16/200918610winform에서 웹서비스를 이용할때, 객체가 전송안되는 문제... [2]
846이강구12/14/200917588ATL COM 제작 문의 [3]
845김재영12/9/200920395ClickOnce에서 WinForm을 배포시 변동되는 Args값을 넘길 수 있나요? [3]파일 다운로드1
843김재영12/2/200918007Hyper-V 사용에 대해여 질문이 있습니다. [2]
842한귀순12/1/200920777Attempted to read or write protected memory [2]
841장근배11/30/200922433첨부 파일 Download시 한글 Name [2]
844장근배12/3/200916993    답변글 [답변]: 첨부 파일 Download시 한글 Name파일 다운로드1
840박영민11/20/200916831웹 애플리케이션 질문입니다. [1]
837left...10/21/200917610아래 게시글 관련하여 추가 질문 [3]
836left...10/19/200918584ActiveX 상에서 암시적 dll 로드 [1]
832김우진10/15/200915194C# 에서 swa + security 구현 방법이 없을까요?
833정성태10/15/200919368    답변글 [답변]: C#에서 swa + security 구현 방법이 없을까요? [1]
834김우진10/15/200915423        답변글 예제 메시지 올려드릴께요. [2]파일 다운로드1
838이영우10/30/200915342            답변글 국세청 전자세금계선서에 관하여 문의드립니다.
831채승수10/13/200917439스마트 클라이언트 GAC 등록 문제 여쭤봅니다... [2]
829박찬용10/9/200930004WebBrowser 컨트롤 사용시 새창을 띄울시 세션/쿠키 공유가 왜 안될까요?? [1]파일 다운로드1
827송창훈9/24/200914993[질문]CAS 설정
828정성태9/28/200918173    답변글 [답변]: [질문]CAS 설정 [1]
825김재영9/18/200916025프레임워크별 비트 지원에 대해서 문의를 드립니다. [2]
821채승수8/27/200915454클릭원스를 비스타에서 실행시 [1]
... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...