개요 - 문제정의. | |
문제 정의. 동일 프로세스 내의 개체들사이에서 Stream Data 를 전달해야하는 시스템에서, 구체적인 달성 방법은 3가지 방식이 있을 수 있다. 어떤 상황에서 어떤 방식이 유용한지 정리. 코드상에서 개체들간의 연결방식은 달라져도 달성해야할 기능적 상황은 동일하다. 즉, 피등록 개체의 버퍼에 데이터 입력되게 하고 즉시 리턴되게 하는것(즉, Non Blocking방식) . 큐에 데이터가 들어온 개체들은 자체 스레드에 의하여 큐버퍼에 있는 내용을 읽어서 이후 후처리를 스스로 진행한다. 주요개념. 개체들의 Q버퍼와 즉시리턴 why? 앞의 글에서 즉시 리턴되게 하는 방식은 필수는 아니나, 1개의 개체에 여러 개의 수신할 개체들이 연결된 경우 각 개체들이 Q없는 것이라면 데이터 전송자 입장에서는 자신에게 연결된 모든 개체들이 리턴해줘야 자신의 다음 작업을 진행할 수 있게되는데, 여러개체 중 1개의 개체라도 처리시간이 지연되는 경우 그것 하나 때문에 전체가 지연되는 일이 벌어진다. 따라서, 공급자측에서 수신측으로 데이터 입력이후 즉시 리턴되게 하기 위하여 수신측 각 개체들이 별도의 Q를 갖도록 설계되어야 함. 위의 구성으로 설계되면 어떤 하나에서 후처리가 지연되는 경우에도 나머지 것들은 지연되지 않고 자신이 처리할 사항을 정상적으로 제시간에 수행할 수 있다. 방법1. 어떤 개체(예: Data Source라고 하자)의 스트림 출력을 수신할 개체들을 DataSource에 등록해두고 DataSource 측에서 데이터 전달해야할 시점에 모든 등록된 개체의 public 멤버 함수 QW 를 호출하여 데이터 전송완료. 방법2. 방법1과 동일한데 개체를 등록하는 것이 아닌 콜백함수 등록. 어떤 개체(예: Data Source라고 하자)의 스트림 출력을 수신할 개체들의 QW 함수를 DataSource에 콜백함수로 등록해두고 DataSource 측에서 데이터 전달해야할 시점에 모든 등록된 콜백함수를 호출(즉, QW 호출되는것임) 데이터 전송완료. 방법3. 메시지 전달 방식. 동일 프로세스 내인 경우 굳이 이 방법을 사용해야할 필요는 없을 듯 하다. 상기 방법1과 방법2,, 기능적으로 동일하나 상황에 따라서 방법1, 방법2 중 선호되는 것이 있을 것이다. 완전하게 하려면 2가지 방식 모두를 지원해주면 된다. | |
|
방법1. 개체 등록하고 개체 멤버함수 호출방식. | |
어떤 개체의 출력데이터를 전송할 개체들을 등록해두고, 출력데이터 발생시 등록된 모든 개체 의 멤버함수 호출하는 방식으로 구성할 경우 아래와 같은 규칙(혹은 제한 사항)을 준수해야한다. 1. 피등록 개체 형식이 단일해야한다. 즉, 개체들의 세부적인 기능은 모두 다를 수 있다. CySignal1은 평균구하는 기능, CySignal2는 피보나치.. 이들 기능이 달라도 데이터 입력 특성이 동일한 베이스클래스에 파생된 클래스로 하면 개체 등록시 베이스클래스 개체를 등록하면 되므로 간단하다. 2. 피등록 개체의 멤버함수 이름과 인자 형식이 동일할것. 데이터 출력 개체 입장에서 자신에게 등록된 모든 개체들의 멤버함수들이 동일하면 함수 호출하는 곳이 간단해서 좋다. | |
|
///569.
'VisualStudio.C++.C# > 코딩팁,함수활용,단편' 카테고리의 다른 글
외부프로그램 실행시키기. CreateProcess, ShellExecute, WinExec (0) | 2016.01.28 |
---|---|
STL Containers. vector, array, deque, list, forward_list (0) | 2016.01.20 |
문자열 복사. _tcscpy_s, strcpy_s, wcscpy_s, _mbscpy_s (0) | 2016.01.18 |
Window Types. (0) | 2016.01.17 |
MFC 프로그래스 컨트롤 사용하기. (0) | 2016.01.16 |
댓글