2009-07-13 5 views
2

우리는 최근 서버에 업로드되어 저장되는 문서의 미리보기 생성 - 소프트웨어에 새로운 기능을 추가했습니다. 이를 다음과 같이 수행했습니다.타이머 서비스

  1. 사용자가 문서를 업로드합니다.
  2. 사용자가 문서 정보 카드를 열면 최근에 업로드 한 문서의 미리보기가 실행됩니다 (미리보기 생성에 대한 정보는 db 테이블에 저장됩니다).
  3. 30 초마다 Google 서비스가 시작되고 미리보기 테이블을 검토하고 미리보기 생성 절차를 시작합니다.

지금 직면하고있는 문제는 미리보기 생성을위한 새로운 코드가 기존 코드를 사용하고 Word 또는 Excel 프로세스가 "고정"되는 경우가 있습니다. 미리보기 중지 및 모든 미리보기 생성은 Word, Excel 프로세스 (Microsoft Office 문서의 미리보기 테스트)가 종료 될 때까지 "보류"모드로 유지됩니다. 프로세스를 종료하면 미리보기 생성이 계속됩니다.

미리보기 생성이 시작된 후 1 분 이상 서비스가 대기하는 경우 프로세스를 중단하고 다른 문서에 대한 미리보기 생성을 계속하도록 서비스에 타이머를 구현할 생각이었습니다.

내가 가진 주요 문제는 우리가 다른 문서와 같이 프로세스를 분리하기 위해 기존 코드로 "이동"할 수 없다는 것입니다 (예를 들어, Process.ini 파일을 통해 GhostScript로 .ps 파일을 구현했습니다. es).

레거시 코드 호출을 "프로세스 화"하는 방법에 대한 아이디어가 있습니까?

+0

분명히하기 위해 "이전 코드를 호출하여 프로세스를 분리 할 수는 없습니다."라고 말했습니다. 이것은 비동기 스레드에서 호출을 래핑 할 수 없으며 잠시 동안 해당 스레드의 상태를 확인하고 스레드가 제 시간에 완료되지 않으면 스레드를 중단 할 수 있음을 의미합니까? 이것은 귀하의 질문에 대한 즉각적인 대답으로 나를 때린 것입니다,하지만 당신의 제한된 어떤 방식으로 당신이 이것을 할 수 없다면 당신은 그것에 대해 자세히 설명해 주시겠습니까? – joshlrogers

+0

예, 맞습니다. 비동기 스레드의 레거시 코드로 호출을 래핑 할 수 없습니다. 그것은 내가 처음에하고 싶었지만 할 수 없었던 것입니다. – brokenisfixed

답변

2

첫 번째 프로세스에서 워치 독 인 두 번째 프로세스를 만들 수 있습니까?

첫 번째 프로세스를 자동으로 다시 시작하고이를 모니터링하고 자체 프로세스를 종료하는 두 번째 타이머 스레드를 사용할 수 있습니까?

+0

자동 재시동은 매우 복잡해 보입니다. 아마도 감시견 방식을 시도해야합니다. 어쩌면 당신은 C#에서 몇 가지 코드 샘플을 가지고 있습니까? – brokenisfixed

+0

공유 할 수있는 코드가 없습니다. 죄송합니다. 작동하는 방식은 서비스를 시작한 후 워치 독을 시작하여 워치 독에 자신의 프로세스 ID를 전달하므로 후자는 어디에서 볼지를 알 수 있습니다. – lavinio

+0

우리는 워치 독 스타일의 서비스를 구현하여 다른 프로세스를 감시하기로 결정했습니다. 고맙습니다! – brokenisfixed