서버에 연결하는 클라이언트 응용 프로그램을 만들고 다른 기능과 함께 서버 채팅을 파일에 기록하므로 나중에 규칙 위반이 처벌 될 수 있습니다.
불행히도 응용 프로그램에 적어도 두 개의 스레드가 있어야합니다. 수신자 루프와 송신기 루프 타이밍 사전 처리가 서버에 필요합니다. 즉, 파일에 데이터를 로깅 할 때 스레드 안전 솔루션이 필요합니다.
이 스레드가 같은 시간 (가능한 한)에서 로그 정보를 보내는 경우 발생할 수 있습니다 것입니다 :멀티 스레드 파일 스트림
logfile.txt:
chat: Hello my name is Duke
chat: Hell[WARNING]: Hacker detectedo my name is John
당신은 다른 주입 한 문장을 볼 수 있습니다. 나는 이런 일이 일어나기를 원하지 않는다. 내 std::cout
출력도 동일하지만 그렇게 중요하지는 않습니다.
질문 :
- 어떻게 한 번에 하나 개의 데이터를 기록 할 수
std::ofstream
을해야합니까? (다른 것을 기억하고 중간에 삽입하지 않고 나중에 삽입) - 파일이 다른 스레드에 의해 닫혔는지 어떻게 확인합니까? (또는 오류)
보너스 질문 : 당신이 std::cout
위해 같은 문제를 해결할 수 있을까요?
파일에 쓰기 전에 뮤텍스를 잠그고 싶을 때 (또는'std :: cout') –
그냥 다른 입력을 차단하고 싶지는 않지만'std'를 다음과 같이 순서대로 만듭니다. 쓰기. 먼저 한 입력을 취한 다음 다른 입력을 취하십시오. –
황태자의 마지막 단락으로 막을 수 있습니다. –