|
제가 전문가는 아니지만.. 장비쪽에서 들어오는 신호를 수신해서 상태에 맞게 무엇인가 발생시킬 수 있는 dispatcher 루틴은 어딘가 하나 있어야 할듯 싶습니다. 그걸 exe를 따로 만들어 하시든지 같은 exe안에서 하시든지는 개인의 재량에 따라 처리해야할 문제 같구요..
지금 쓰신거 보니까.. 특정 타이머(쓰레드) 안에서 매번 체크하여 어떤 신호가 왔을때 어떤걸 처리하고 이런 방식이 procedural 코딩방식에 약간 불편함을 느끼시는거 같네요.
혹시 이런게 하고싶으신건가요..어떤 모듈 안에서 값이 있나 없나 체크하여 있으면 작업해주고..타이머 루틴으로 빠지지않고.. 저 같은 경우 atm장비의 시리얼 통신에서 비슷한 경우가 있었는데..시리얼 통신으로부터 데이터 값을 받아서 신호 명령에 맞게 파싱하여 처리하는 스레드를 따로 두고.. 대신..버퍼라는 영역에 발생하는 순서대로 쌓아두도록 했습니다. 그러고 메인 루틴에서는 신호를 전송해보고 리턴값을 버퍼로부터 받는 기능을 추가하여 따로 빠지지않고 한 루틴 안에서 처리할 수 있도록 만들었는데.. 설명은 구체적으로 하기는 힘듭니다.
말씀하신대로.. 프로퍼티 하나 만드시고.. 이벤트 핸들러 연결되게 하신후..
신호 수신 쓰레드에서 특정 코드가 나올때 해당 이벤트 핸들러를 호출하도록 그런식으로 하셔도 될듯 싶네요.
좀 더 연구를 해보시는게.. 좋을듯 싶습니다. 이런 코딩은 잘못하면 정말 지저분하고 복잡해질 수 있으니까요.
-locke
오바군 님이 쓰신 글 :
: 제가 하고 있는 프로그램이 검사 장비 만드는 일인데요
:
: 프로그램을 만들다 보면 항상 느끼는것이지만 C++을 그냥 C언어 마냥 짜는게 가장 못마땅 했습니다.
:
: 예를들면 어떤 I/O에서 어떤 정보가 들어온다고 하면 그 정보를 계속 읽어서 실시간으로 처리를 해줘야 하는 일이 있는데요
:
: 프로그램이 I/O에서 계속 들어왔는지 체킹 해주면서 동시에 다른 여러가지 일을 처리 해주려고 하다 보니
: 가장 많이 쓰는게 Timer로 몇 interval 만큼 계속 그 정보가 들어왔는지 체크해주고 timer안에서 거의다 처리 해주는 그런 프로그램이다 보니 수정하기도 좀 까다롭고 가독성이 상당히 떨어지는 프로그램이 되버리는데요
:
: 새롭게 컴포넌트를 만드는것이 아니라 기존에 있던 컴포넌트 예를들면 첨부파일에 있는 Button 같은 원래 프로피터가 정의 되어있는 그런 컴포넌트에 "저쪽 I/O 에서 헨들러 신호가 오면 ~~~ 하게 처리 해줘" 라고 처리를 해주는 방법이 있는지 해서 글을 올려봅니다.
:
: 요지는 이런식으로 루프를 써서 어떤 값이 들어왔는지 주기적으로 검사 하는게 아니라 헨들러 자체가 해당 I/O에 데이터가 들어왔는지 판별해서 다른 헨들러에게 알려주는 방법이 없을까요?
:
: 간단한 예로 버튼을 하나 만들고 클릭 이벤트 등록 해주면 프로그램이 실행되는동안 어떤 특정 루프가 돌지 않아도 클릭이 되면 Button1Click() 이벤트가 동작되는것 처럼 그런 이벤트를 제가 직접 어떤 컴포넌트에 등록이 가능한가요?
:
: 이쪽 검사 장비 관련 일하시는 분들이나 아니면 다른 분들도 대부분 Timer로 처리를 하시는지..?
:
: 조언을 구합니다.
|