먼저 달성해야 할 내용을 요약해서 설명하겠습니다. 저는 시간이 지남에 따라 적어도 두 가지 유형의 데이터를받는 수집 시스템을 가지고 있는데이를 국가 추정 프레임 워크에 통합해야합니다.순환 버퍼에서 여러 유형의 시간 순서 이벤트를 큐에 넣으십시오. 조언을주세요.
- 유형 : 그것은 (10 Hz에서)하는 FIFO 큐이 충분히 될 것 도착하는대로 일부 데이터를 직접 통합 될 수있는 데이터 수신에 대한 두 가지 시나리오가 있습니다.
- 유형 B : 불행히도 데이터의 일부는 더 많은 처리 (1 초)가 필요하므로 지연으로 평가 프레임 워크에 통합됩니다. 이 경우에는 다음을 수행해야합니다. (1) (처리 전) 유형의 수신시 프레임 워크의 이전 상태를 복구하십시오. 다음 (2) 그 시점에서의 상태를 재 계산하는 타입 B에게 데이터를 사용하고 (3)는 (데이터가 존중 인용 된 모든 유형을 그 사이에 수신 데이터를 통합 시간 전진 시간 순서). 뷰의 C++ 프로그래밍 관점에서
, 나는 다음과 같은 해결책을 생각하고 :
- 은 일반적인
timeSample
클래스를 정의합니다. 따라서 모든 종류의 데이터는timeSample
어머니 클래스를 상속 한 클래스로 캡슐화됩니다. 따라서 포인터timeSample
에서 동적으로 캐스팅 할 수있는timeSampleA
및timeSampleB
을 갖습니다. 이것은 샘플이 현재 샘플 일 수 있고 적절한 함수를 호출 할 수 있기 때문에 샘플을 평가 프레임 워크로 다시 전달할 때 유용합니다. - 각 timeSample 하위 클래스에는 순환 버퍼가 있습니다. 그래서
timeSampleA
데이터는circularBuffer<timeSampleA>
에 저장되고,timeSampleB
데이터는circularBuffer<timeSampleB>
에 저장됩니다. multiset<timeSample*>
은 샘플의 시간 순서화 된 포인터를 저장하는 데 사용됩니다 (포인터 중 일부는circularBuffer<timeSampleA>
내부의 데이터를 가리키고 다른 일부는circularBuffer<timeSampleB>
내부의 데이터를 가리킴).timeSample
포인터는 샘플이 수신 된 시간을 저장하는timeSample
인스턴스 내부의 시간 필드를 사용하여 정렬됩니다.- 데이터가 올바르게 관리되도록 모든 컨테이너가 동일한 클래스에 포함됩니다. 예를 들어, 유형 B 샘플이 처리를 완료하고 평가가 갱신되면; 어느 샘플을 지울 수 있는지를 정의하는 컷오프 시간이 증가합니다. 이 작업을 수행하려면
multiset
및circularBuffer
에서 데이터를 올바르게 지울 필요가 있습니다.
내가 알고 싶습니다 :
- 오류 및 내가 제안 현재 솔루션의 제안을.
- 원형 버퍼 템플릿 구현에 대한 제안. 현재 부스트 라이브러리 순환 버퍼를 사용하는 방법을 배우고 있습니다 ->http://www.boost.org/doc/libs/1_49_0/libs/circular_buffer/doc/circular_buffer.html
- 유사한 문제가 발생하면 순환 버퍼를 많이 사용하는 데 많은 도움이됩니다.
귀하의 의견을 환영합니다!
지금까지 무엇을 작성 했습니까? – Raedwald
멀티 세트 작업을 시작했습니다. 자동으로 정렬되는'timeSample'을 추가 할 수 있습니다. typeB 샘플을 "사용"할 때 해당 typeA 및 typeB 샘플을 삭제하는 차단 시간을 앞당길 수 있습니다. – jespestana
저는 약간의 불명확합니다 - 센서 측의 "처리 시간"입니다 (따라서 B 형 샘플을 1 회 체납합니다), 또는 B 형 샘플을 현재 상태에 통합하는 데 필요한 시간입니까 (그래서 type B 샘플은 정시에 도착하지만 즉시 상태로 통합 될 수는 없습니까?) –