2012-04-25 6 views
2

내 게임 프로젝트를위한 여러 게임 서버를 시작하고 제어하는 ​​관리자이기 때문에 boost :: thread로 만든 일부 스레드가있는 프로그램이 있습니다.스레드를 캡슐화하는 방법은 무엇입니까?

관리자는 하나의 응용 프로그램으로 구성되어 있으며 제 질문은 다음과 그것이 NULL 포인터 예외 동안 예를 들어 충돌 경우 또는 유사한 스레드 자체가 끝나는 것을 이런 식으로 스레드를 캡슐화하는 방법

아니라 이후 전체 프로그램이 다운됩니다.

+0

처음에 처리되지 않은 예외를 허용하는 이유는 무엇입니까? – FailedDev

+0

물론 나는 그것을 허용하고 싶지 않지만 다중 데이터베이스 연결이있는 게임 서버 인 큰 프로젝트에서 인스턴스와 외부 파일의 실수가 발생할 수 있습니다. 그리고 내가 실수로 업데이트를하고 테스트 기간이나 그와 비슷한 것을 놓친 경우 모든 서버가 동시에 충돌하는 것을 원하지 않습니다. – user1356103

+0

당신의 질문은 실제로입니다 : "코드를 작성하여 sanely 처리 할 코드를 작성할 수 있습니까?" 이것이 그 질문 인 것을 깨달을 때, 그 대답은 명백해야합니다. –

답변

2

먼저, 코드에서 널 포인터 예외가 발생하지 않아야합니다. 이것은 필수 요구 사항입니다.

대신 애플리케이션을 여러 통신 프로세스로 분리 할 수있는 방법이 있습니까? 그 중 하나가 충돌하면 나머지는 영향을받지 않습니다.

+0

전적으로 동의합니다. 우리는 항상 프로그램이 멀티 스레딩이 가능한지 제대로 작동해야한다는 전제로 시작해야합니다. 나는 최근에 '일들을 지키려는 것'을 목표로 한이'catch (...)'라이브러리 코드를 너무 많이 보아왔다. –

+0

물론 나는 그렇게 할 계획이 없지만 큰 프로젝트가 될 수있다. 아마 일어날 것입니다. 그 경우에는 그것을 찾아서 고칠 것입니다. 먼저 다른 답변을 기다릴 것입니다. 한 응용 프로그램 내에서 그것을 실현하는 방법이 있다면. 그렇지 않다면 나는 충고를 따르지 않고 여러 가지 프로세스를 만들 수 있습니다. – user1356103

+0

이것은 스레드가하는 일이 아닙니다. 스레드는 거의 모든 것을 공유합니다. 하나의 스레드가 amuck을 실행하면 프로세스 컨텍스트는 토스트가됩니다. 스레드는 완전히 협조하고 완전히 신뢰해야합니다. –

관련 문제