2009-07-13 4 views
2

私たちは最近、ソフトウェアに新しい機能を追加しました。これは、サーバーにアップロードされて保存されたドキュメントのプレビュー生成です。これを次のようにしました:サービスのタイマー

  1. ユーザーはドキュメントをアップロードします。
  2. ユーザーがドキュメントインフォメーションカードを開くと、最近アップロードされたドキュメントのプレビューが発行されます(プレビューの生成に関する情報はdbテーブルに保存されます)。
  3. 30秒ごとにサービスが開始され、プレビューテーブルを確認してプレビュー生成手順を開始します。

私が直面している問題はこれです。プレビューを生成するための新しいコードでは、従来のコードを使用してWordやExcelのプロセスを「フリーズ」することがあります。私はWord、Excelプロセス(私たちはMS Officeドキュメントのプレビューをテストする)を殺すまで、プレビュー停止と次のすべてのプレビューの生成は "保留中"モードにとどまります。プロセスを終了した後、プレビューの生成が続けられます。

プレビューの生成が開始されてから1分後にサービスが待っている場合は、プロセスを終了して他のドキュメントのプレビューを生成する必要があるように、サービスにタイマーを実装することを考えていました。

私が持っている主な問題は、私たちが他のドキュメントと同様にプロセスを別のコードに移動することができないことです(例えば、 es)。

レガシーコードへの呼び出しを「処理」する方法についてのアイデアはありますか?

+0

明確にするために、あなたは「私のレガシーコードへの呼び出しをプロセスを別々にすることはできません」と述べました。これは、非同期スレッドで呼び出しをラップすることができず、そのスレッドのステータスを1分間確認し、時間内に完了しない場合はスレッドを中止することができますか?これはあなたの質問への即座の答えとして私を襲ったものですが、何らかの方法であなたがこれを行うことができないことが制限されていれば、それを詳しく教えてください。 – joshlrogers

+0

はい、あなたは正しいです - 私は、非同期スレッドでレガシーコードに呼び出しをラップすることはできません。私が最初にやりたかったことですが、できませんでした。 – brokenisfixed

答えて

2

最初のプロセスでウォッチドッグの2番目のプロセスを作成できますか?

最初のプロセスを自動再起動し、それを監視して独自のプロセスを終了させる2番目のタイマースレッドがありますか?

+0

自動再起動はかなり複雑に思えます。おそらく、ウォッチドッグのアプローチを試してみるべきです。多分あなたはC#でいくつかのコードサンプルを持っていますか? – brokenisfixed

+0

共有できるコードはありません。申し訳ありません。あなたのサービスを開始することですが、ウォッチドッグを開始し、自分自身のプロセスIDをウォッチドッグに渡すので、後者はどこを見るかを知ることができます。 – lavinio

+0

私たちは、ウォッチドッグスタイルのサービスを実装して、他のプロセスを監視することに決めました。ありがとうございました! – brokenisfixed

関連する問題