그런데 GetTickCount값은 47.7일에 한번씩 리셋되는걸로 아는데요.
만약 저 리셋될때 우선순위 큐에 이전 값이 들어 있으면 우선순위큐에 들어있는 값이 나오지못하는
잠제적인 버그가 있지 않을까 생각됩니다.
예를 들면 GetTickCount 값이 0xFFFFFFFF 이라고 가정하고
Message block하나를 이때 집어 넣는다면 아래와 같을것이고
_PushQueue( block, 0xFFFFFFFF);
ServiceImpl::PopQueue 가 호출될 시점에 GetTickCount는 0x0 값으로 바뀌었다고 가정하면
ServiceImpl::PopQueue 에서는 아래 코드에 의해서
if (block->msg_priority() > current_tick)
{
_block_queue->enqueue_prio(block, &noWait);
break;
}
다시 집어넣고 나올 가능성이 있다고 봅니다.
여기를 보시면 Message_Block에 msg_execution_time, msg_deadline_time 을 사용하는것이 있
던데 이것은 어떤가요?
컴파일해서 실행해봤지만 작동되지는 않더군요.
ACE_HAS_TIMED_MESSAGE_BLOCKS 디파인을 넣어서 재 컴파일을 해야하면될듯 보입니다.