Thread를 사용하기 꺼려지면 Timer를 사용하는게 좋을 것 같은데요.
Sleep을 사용하면 그동안 UI는 먹통이 되버리니...
그나마 100msec 정도는 Timer로도 충분할 듯...
땅주인 님이 쓰신 글 :
: 환경: RAD Studio XE5 ( C++ Builder XE5)
: Component : AsyncPro Component (비동기 Serial Comunication Component)
:
: ComPort 3개와 동시에 통신 중입니다.
: 3개의 Comport 중 하나의 ComPort가 상대방 장비의 동작 속도가 상대적으로 느려서 천천히 Send를 해야 할 상황이라서..
: Send하고 잠깐 쉬고 Send하고 이런 식으로 코딩하였습니다.
:
:
: ComPort1->Send(xxx);
: Sleep(100); // wait for while
: ComPort1->Send(xxx);
: ...
:
:
: 이런 식으로 코딩을 했는데,
: 문제는 이렇게 쉴 때, ComPort2 / ComPort3의 수신 이벤트(OnTriggerAvail)를 받지 못합니다.
: Message Pumping 루틴을 이용해서..
:
:
: ComPort1->Send(xxx);
: Sleep(100); // wait for while
: Application->ProcessMessages(); // Sleep하는 동안 도착한 Event를 처리한다.
: ComPort1->Send(xxx);
: ...
:
:
: 이렇게 처리해도 마찬가지네요. 될 때도 있고, 안될 때도 있는데, 안되는 케이스가 더 많아요(70~90%이상)
: Thread로 처리하려니 AsyncPro 자체가 비동기 ComPort라 이것도 애매하네요.
: ComPort1->GetBlock(Buffer, Count); // Count가 정확하지 않으면 Exception이 나버리네요.
:
: Sleep()을 쓰지 않고, 다른 Event가 유실되지 않게 일정 시간을 기다리게끔 할 수 있는 방법이
: 있을까요?
:
: 가령
:
: ComPort1->Send(xxx);
: Wait(100); // Event를 처리하면서 100ms를 기다린다.
: ComPort1->Send(xxx);
: ...
:
:
: 이렇게 할 수 있는 방법은?
:
: 감사합니다.
:
:
: