- - PR -
APL強制終了時のイベントの発生について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-09-26 09:39
投稿者です。
J.J. さんご回答ありがとうございました。 また、引き継いだ事を言い訳にして...設計自体に問題があると感じてきました(保守も大変です)。お知らせしておりませんでしたが(すみません)、この画面の切り替えなどにタイマーを使っていることもあり、タスクマネージャとタイマーイベントの間で、タスクマネージャでの強制終了の際にタイマーイベントがストップして「QueryUnloadイベント」でハンドリングできなかった、と言う風にも思ってきました。 とはいえ、設計の問題は、解決しなくてはならないと考えています。 | ||||
|
投稿日時: 2007-09-26 09:46
そりゃそうでしょ。プロセス死んでいるのにタイマーだけ動くなんてVB6だけに限定すればありえない。 [ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2007-09-26 09:46 ] | ||||
|
投稿日時: 2007-09-26 10:24
まず強制終了を強制終了されるアプリケーション内部でトラップすることは出来ません。したがって終了時に何らかの処理を行いたいのであれば、強制終了以外の方法で終了してください。
タスクマネージャから終了を行った場合、まず対象アプリケーションにメッセージが送られます。メッセージに対するアプリケーションの応答が無い場合、つまりUIスレッドがデッドロックしている場合には「応答なし」と表示され、強制終了をおこなうことになります。「応答なし」と表示されているということは、メッセージを処理できる状態に無いわけから、メッセージを受けたときのイベントの処理を書いても無駄です。 対策としては二通りあると思います。 ひとつはソフトAを呼び出す処理をUIスレッドとは別のスレッドに分離する方法。そうすればソフトAが異常をきたしてデッドロックしたとしても、UIスレッドは動作しているので、普通に終了処理を行えるはずです。 もうひとつはUIスレッドとは別のスレッドを作成し、別スレッドからUIスレッドが正常に動作していることを監視、動作に異常をきたしたなら終了処理を行う方法。UIスレッドに対して定期的にメッセージを送信。その応答を監視することで実現できるはずです。 | ||||
|
投稿日時: 2007-09-26 15:35
投稿者です。
甕星 さんご回答ありがとうございました。 スレッド分離についての再設計も必要だと思いました。 設計段階まで遡り検討していきたいと思います。 ありがとうございました。 |