문제

파일 스트림 전송에서 중지 및 다시 시작 구현에 대한 텍스트 또는 조언을 찾고 있습니다.

목표는 애플리케이션이 단일 읽기 소스를 사용하고 여러 쓰기 소스로 출력하고 전송이 실패 할 경우 기록 된 위치에서 다시 시작할 수 있도록하는 것입니다.

응용 프로그램이 C # .NET으로 작성 중입니다.

의사 코드 : 라코 디스

중지 또는 일시 중지를 구현할 수 있어야합니다. 그렇게 작동 할 수 있습니다. 중지하려면 계속이 false로 표시됩니다. 라코 디스

이 단계에서 분명히 읽은 바이트 수와 각 쓰기 소스에 쓴 바이트 수를 기록해야합니다.

제 질문은 다음과 같습니다.

읽은 바이트 만 기록하고이를 다시 시작하는 데 사용한다면 한 명 이상의 작성자가 작성했을 수 있지만 다른 작성자는 작성하지 않았을 수 있습니다. 읽기 진행률 측정을 사용하여 단순히 다시 시작하면 기록 된 데이터가 손상 될 수 있습니다. 따라서 새 시작 위치로 '작성자 당 기록 된 바이트'레코드를 사용해야합니다. 바이트가 기록되었는지 어떻게 확인할 수 있습니까 (파일 길이를 읽기 위해 쓰기 소스에서 파일을 읽을 수없는 경우 일 수 있음)?

누구든지 이런 종류의 문제에 대해 조언을 해주거나 올바른 방향으로 안내해 줄 수 있나요?

도움이 되었습니까?

해결책

스레드 동기화 이벤트를 사용합니다.

(의사 코드) : 라코 디스

좋은 점은 쓰기 스레드가 일시 중지 될 때 CPU를 소비하지 않고 직접 신호를 받으면 계속된다는 것입니다 (플래그 및 유전자 태그 코드를 사용하는 것과 반대)

다른 참고 사항은 Thread.Sleep()가 스트림에서 읽히기 때문에 모든 검사는 while에서 첫 번째 인수 여야한다는 것입니다 (그러나 플래그가 있기 때문에 콘텐츠는 무시됩니다while 블록이 실행되는 것을 방지합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top