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

C++빌더 Q&A
C++Builder Programming Q&A
[69494] Re:쓰레드와 타이머 비교...
조대현.Clau [casanebula] 2111 읽음    2013-05-19 00:05
얼마나 정확한 성능이 필요한가에 따라 난이도가 다릅니다.

가장 쉬운 방법은 주기적으로 현재 시각을 읽어 200ms가 될때마다 실행하는 것입니다.
소스먼저 보시죠.

void __fastcall Execute()
{
   TDateTime LastTime = Now();

    while(!Terminated){
        if (MilliSecondsBetween(Now(), LastTime) >= 200)
        { 
             LastTime = Now();

             // 200ms마다 할일
             Synchronize(&RecvFunc);
        }
        Sleep(1);
    }
}


이렇게 하면 RecvFunc(100ms소요) 실행 후 100ms정도 대기 후 다음 Tick이 이루어집니다.
단점이라면 인터럽트가 아니기 때문에 RecvFunc에서 500ms 소요되면 작업이 지연됩니다.
크리티컬한 부분에서는 사용하시면 안됩니다.


쓰레드 님이 쓰신 글 :
: 쓰레드를 이용해 통신하려고 하는데요...
:
: 그런데 궁금한게 있어서 질문올려봅니다...
:
: void __fastcall Execute()
: {
:     while(!Terminated){
:         Synchronize(&RecvFunc);
:         Sleep(200);
:     }
: }
:
: 저렇게 쓰레드를 구현중인데요.. 궁금한건...
:
: 타이머의 경우 200ms 안에 작업을 하고 대기하고있는데요...
:
: 쓰레드는 작업후 Sleep(200)를 다시 기다렸다가 다음 루프로 들어오는 것 같더라구요..
:
: 1. 쓰레드도 타이머의 Interval 처럼 정해준 시간안에 처리하고 대기할순 없나요??
:
: 2. 쓰레드도 타이머도 모두 시작시 Sleep 시간 및 Interval 시간을 먹고 실행하던데요..
:
: 바로 시작해서 작업후 Sleep 및 Inverval을 기다리게 할 순 없나요??
:
: 고수분들의 많은 답변 기다려봅니다 ^^ 수고하세요

+ -

관련 글 리스트
69490 쓰레드와 타이머 비교... 쓰레드 1901 2013/05/17
69494     Re:쓰레드와 타이머 비교... 조대현.Clau 2111 2013/05/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.