2016-10-31 5 views
0

로컬 네트워크에 대한 간단한 피어 투 피어 인스턴트 메신저를 쓰고 있습니다. 그것은 ini 파일을 사용하여 UUID를 구문 분석하여 네트워크에서 식별자로 사용합니다. ini 파일은 QSettings 객체를 통해 액세스됩니다. 필자는 프로그램의 여러 인스턴스를 동일한 컴퓨터에서 실행할 수있는 기능을 작성했습니다. 첫 번째 프로그램이 실행될 때 첫 번째 항목에 대한 ini 파일을 읽은 다음 읽으면 "INUSE"로 바꿉니다. 닫을 때 키 값을 원래 UUID로 바꿉니다. 프로그램의 다른 인스턴스가 ini 파일을 읽고 INUSE를 첫 x 째 키 값으로 읽으면, 다른 프로그램 인스턴스를 작성한 후 가져 와서 두 x 째 키 값에 INUSE 태그를 넣습니다.충돌시 업데이트가 필요한 Qt5 ini 파일

이것은 잘 작동하지만 프로그램이 충돌하면 "INUSE"인 UUID가 손실되고 INUSE는 수동으로 꺼내기 전까지 남아 있습니다. 같은 것을 이루는 시스템으로 어떻게 충돌 할 수 있습니까?

필자는 QLockFile을 살펴 보았지만 이러한 시스템을 구현하는 방법을 정확하게 설명하지는 못했습니다.

모든 의견을 환영합니다. 다음

ini를 현재 파일 포맷은 다음

[uuid] 
1={uuid1} 
2={uuid2} 

프로그램 1

[uuid] 
1=INUSE 
2={uuid2} 

[uuid] 
1={uuid1} 
2={uuid2} 

본질적으로 어떤 프로그램의 정상 종료 후

을 실행 중에 프로그램 실행 사이에 데이터를 보존하는 방법이 필요하지만 상기 데이터는 현재 사용되고있다.

답변

0

내가 제일 먼저 생각하는 것은 프로그램이 충돌하는지 확인하는 것입니다. 더 나은 솔루션을 선택하십시오.

QLockFile을 사용하면 동일한 파일에 여러 프로세스가 액세스하는 것을 방지 할 수 있습니다. 그래서 이것은 프로그램이 그것의 beacuse를 부수고 있다면 당신에게 유용 할 것입니다. 이 경우 어느 프로그램이 충돌하는 이유는 무엇

, 내가 올바른 작업을 수행 할 예외의 사용을 권 해드립니다 것이다 :

try { 
    // Some of your code 
} catch (exception &e) 
{ 
    // Some error occured, do something about it. 
    // Like restoring your UUID. 
} 

당신은 예외 here에 대한 자세한 내용을보실 수 있습니다, 그리고 당신은 항상 사용할 수 있습니다 QT 버전 Qexception.

희망 하시겠습니까?

+0

감사합니다. 내가 현재 알고있는 어떤 시점에서도 프로그램이 충돌하지 않지만 유닉스 또는 Windows에서 SIGKILL 메시지가 전송되면 원래 게시물의 상황이 나타납니다 – cbpeckles

+0

@cbpeckles 그런 다음 질문이 생깁니다 나쁜 단어 IMO. 나는 당신이 그것을 고치지 않으면 당신이 원하는 답을 얻지 못할 것이라고 생각하지 않습니다. –