C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[698] 쓰레드에서 CPU 자원을 소모하지 않고 일정 시간 기다리기.
김태선 [cppbuilder] 13191 읽음    2007-08-08 16:44
보통 쓰레드 루핑에서는 CPU를 점유하지 않기 위해,
Sleep(...) 을 주어 CPU가 Context switch를 알아서 할 수 있도록 합니다.
Sleep(...) 을 주는 것은 일반적으로 알려진 좋은 방법입니다.
그런데 조금 더 효과적인 방법은 WaitForSingleObject 함수를 쓰는 것입니다.
정확하게 얼마나 더 좋은지는 저도 사실 모릅니다만,
이 함수는 API 에서 처리하는 것이므로 OS에서 가장 자원을 효과적으로
쓸수 있게 되어 있을 것으로 생각됩니다.
보통 WaitForSingleObject 는 자원을 소모하지 않고 어떤 일에 대한 결과를 기다리는데
사용되어지며 그런 목적에 가장 알맞다고 알려져 있기 때문입니다.

아래는 소스 중 일부입니다.

    void __fastcall Execute()
    {
        Client->Connect();
        DWORD  start = GetTickCount();
        while (!Terminated)
        {


            //Sleep(40);
            WaitForSingleObject((void *)Handle, 40); // 요렇게 기다리는게 더 좋습니다.
            if (GetTickCount() - start > 5000)
            {
                break;
            }
        }
        if (Client->Connected())
        {
            Client->Disconnect();
        }

    }
장성호 [nasilso]   2007-08-08 18:10 X
저도 예전에 24시간 계속도는 쓰레드에 Sleep으로 했다가...
pc에 따라 엄청 자원을 먹어서... 삽질끝에 WaitForSingleObject로 해결했던 기억이 있네요

근데 ..WaitForSingleObject 는 여러가지 목적으로 쓰이던데...
어떤  process 실행해 놓고 종료를 기다릴때
또는  세마포어 나 뮤텍스를 이용한 동기화등...

함수에 대한 좀더 깊이 알고싶습니다.
좀 가르쳐 줄수 없을까요?
김태선 [cppbuilder]   2007-08-08 20:17 X
Win32 API 김상형씨가 지은 책에 잘 설명되어 있습니다.
나이가 드니 기억력이 가물가물해서..... 지송~ ㅎㅎ~

장성호 [nasilso]   2007-08-09 00:35 X
이책 말이죠?
http://book.naver.com/bookdb/book_detail.php?bid=34611
감사합니다.
장성호 [nasilso]   2007-08-09 10:00 X
책에서는 못찾고 MSDN자료보고 대충 이해했는데요
( http://msdn2.microsoft.com/en-us/library/ms687032.aspx )
님께서 잘모르겠다고 하신 Sleep과 WaitForSingleObject 의 차이에 대해서는 모르겟네요

Sleep도 정확하게 잘모느니뭐.. 쩝쩝..

OS에서 Context switch할때 Sleep되어있는 쓰레드는 그냥 뛰어넘나?
Context switch 하는 방식에서 Sleep과 WaitForSingleObject 에 무슨 차이가 있을것 같은데.. .


+ -

관련 글 리스트
698 쓰레드에서 CPU 자원을 소모하지 않고 일정 시간 기다리기. 김태선 13191 2007/08/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.