I 네 I 개발 야/CLI GUI ++는 C 스레드 가지고 는 C++/CLI 효율적인 멀티 스레드 원형 버퍼
- 수집 원시 데이터 청크를 취하는 유용한 정보 나 원시 데이터 C있어
다른 세 개의 스레드를 연결하는 컨트롤러로
새로운 원시 데이터는 한 번에 하나의 결과로 정기적 (빈번한) 간격으로 공급됩니다. GUI는 도착한 각 새 항목에 액세스합니다 (컨트롤러가 새 데이터를 발표하고 GUI가 공유 버퍼에 액세스 함). 데이터 프로세서는 주기적으로 버퍼의 청크 (예 : 초의 가치)를 읽고 새로운 결과를 생성합니다. 이렇게 효과적으로, 1 명의 생산자 및 2 명의 소비자가 액세스해야합니다.
나는 주변에서 사냥을 해왔지만, CLI가 제공하는 모든 것들은 그렇게 유용한 것 같지는 않다. 수집기에 대한 쓰기 잠금 및 GUI 및 데이터 프로세서에 대한 읽기 잠금을 허용하는 공유 순환 버퍼입니다. 이렇게하면 버퍼의 섹션이 기록되지 않는 한 여러 스레드가 데이터를 읽을 수 있습니다.
제 질문은 : 이것을 구현할 수있는 .net 라이브러리에 간단한 해결책이 있습니까? 나는 내 자신을 굴리는 것에 대해 화가 났는가? 이 작업을 수행하는 더 좋은 방법이 있습니까?
내 반복 질문에 맞습니까? 컨트롤러가 빠른 필터링을 수행하면 데이터가 변경되지 않습니다. 제안 사항이 적용될 수도 있지만 GUI에는 데이터 프로세서의 사본과 백그라운드 프로세서가 필요합니다. 나는 그저 곳곳에 메모리를 할당하고 할당을 해제 할까봐 걱정했다. 그래도 그 곳에서 데이터의 복사본을 보내면 물건이 느려지는지 알 수 있습니다. –
메모리 할당/할당 해제가 염려되면 2 개의 벡터를 사용하는 것이 좋습니다. 생산자, consummer에 대한 하나). 당신은 단지 빠른 조작 인 주위를 교환 할 수 있습니다. 또한, 당신이 resize (0)을 clear 대신에 사용한다면, alloc/reallocation이 없도록 용량을 유지해야합니다 ... 물론 올바른 장소에 자물쇠를 넣어야합니다 – Arthur