日記のテキストファイルを読み込んでメモに表示するだけの小さなプログラムがあります. それが実行されると(閉じても)、Windows XPは「Windowsがシャットダウンしています」まで到達します。「ユーザー設定の保存」などの後、ハングします。私が書いた他のプログラムとほとんど変わらないように見えるコードを調べましたが、これははるかに複雑ですが、何も問題はありません。たとえば、クローズルーチンには application.terminate が含まれています。私がそれらを使い果たしたように見えるので、何かアイデアはありますか?
4 に答える
あなたが説明した内容に基づいて、プログラムにはプログラマーが追加したコードが 1 行だけ含まれている必要がありますMemo1.Lines.LoadFromFile
。「それだ」と言うのはそういう意味です。
そのプログラムには、「クローズ ルーチン」さえ必要ありません。(フォームのイベントのことだと思いますOnClose
。) メイン フォームが閉じると、アプリケーションは自動的に終了します。これが、すべての Delphi プログラムの仕組みです。その上にさらに多くのことをしている場合は、やりすぎです。
次のコードは、Windowsのシャットダウンメッセージに反応し、プログラムを閉じます。
TForm1 = class(TForm)
...
private
procedure WMEndSession(var Message: TWMEndSession); message WM_ENDSESSION;
...
end;
procedure TForm1.WMEndSession(var Message: TWMEndSession);
begin
close;
end;
問題が何であるかが完全に明確ではないため、いくつかの提案があります。
アプリケーションを閉じるときに問題が発生したり、Windows のシャットダウン中にハングしたりしますか?
- application.Terminate にブレークポイントを設定してみましたか? そして、それは追加情報を提供しますか。
- メインフォーム内からは、Application.Terminate ではなく Close を使用できます。
アプリが CPU 時間を使い果たしている場合、アプリはシャットダウンを禁止できますが、Vista や W7 などの「最新の」OS では、一定期間後にこれについて通知し、アプリを中止できるようにするダイアログが表示されます。タスク マネージャーで「プロセス」を表示して、アプリがアイドル状態のときに 0% の CPU を示していることを確認します。ブライ