2011-02-17 6 views
3

주어진 패킷/초 간격으로 패킷을 생성하는 소스의 패킷을 시뮬레이트하고 있습니다. ostream 객체처럼 작동하는 스트림 클래스를 만들고 싶습니다. 따라서 operator<<을 사용하여 출력 할 수 있지만 각 값을 버퍼에서 파일 설명자로 순서대로 지정된 위치에 놓아야합니다. 간격.일정한 간격으로 플러시되는 버퍼링 된 스트림을 구현하는 표준 방법은 무엇입니까?

그래서, 예를 들어, 나는 파일 기술자 sockfd와 소켓을 가지고 말할 수 있습니다

MyBuffer buffer(sockfd, 1000); //Interval of 1000 milliseconds 
buffer << 1 << 2 << 3; 

출력은 소켓에 출력

1 
<1 second gap> 
2 
<1 second gap> 
3 

것 같은 시간이 초과 될 것이다. 나는 부스트를보고있다. 지금은 유령이 좋은 해결책일까요? 내가 인식 할 수없는이 문제를 설명 할 수있는 마법의 문구가 있습니까?

도움을 주시면 감사하겠습니다.

감사 매 초마다 스레드에 의해 폴링있어 문자열의 큐를 유지하는 것입니다 사용자 정의 스트림 클래스를 구축 완전히 직교의이이 작업을 수행하는 브래드

+0

한 번에 * 문자 * 한 번에 하나씩 스트림에 삽입 된 * 객체를 해제 하시겠습니까? – templatetypedef

+0

패킷이 출력되는 동안 삽입이 동시에 발생합니까? 그렇다면 스트림이 1 초 이상 비워지고 다시 비어 있지 않으면 어떻게됩니까? 다음 패킷이 즉시 또는 다음 1 초 간격으로 전송됩니까? –

+0

@templatetypedef 그것은 오브젝트 –

답변

2

하나 개의 옵션. 대기열이 폴링 될 때마다 스레드는 첫 번째 요소를 읽고 네트워크를 통해 전송합니다.

이것은 스트림 라이브러리를 사용하지 않지만 원하는 것일 수 있습니다. 내부적으로, 대부분의 스트림은 대량의 텍스트에 들어가는 모든 입력을 함께 묶어 텍스트의 어느 부분이 삽입 한 각 객체에 해당하는지에 대한 정보를 잃어 버리게됩니다.

EDIT : 처음 언급했을 때이 큐에 적절한 동기화를 사용해야합니다. 뮤텍스를 사용하여 액세스를 보호하거나 작동하지 않는 경우 영리한 잠금없는 큐를 사용하려고합니다. 여러 스레드에서 맹목적으로 읽고 쓰지 않도록하십시오.

2

1000ms는 비동기입니까? 그렇지 않다면 스트림 운영자에게 수면 (1000)을 넣을 수 있습니다. < <. 당신이하려는 일에 따라, 그것은 당신에게 어울릴 수 있습니다.

관련 문제