얼마나 정확한 성능이 필요한가에 따라 난이도가 다릅니다.
가장 쉬운 방법은 주기적으로 현재 시각을 읽어 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을 기다리게 할 순 없나요??
:
: 고수분들의 많은 답변 기다려봅니다 ^^ 수고하세요
|