こんにちは。
いつも参考にさせていただいております。
WinXP(Home)でVisualStudioC++を利用してソフト作成をしています。
通常はデスクトップを利用しているのですが、ふとノートPCでデバッグ
しようとした際に・・・
バッテリー電源が100%の場合は問題なくアプリケーションが実行
されるのですがバッテリーが90%等と、100%で無い時にはアプリケ
ーション起動後に数秒するとアプリケーションが終了してしまいます。
どなたかこのような経験はないですか?
MainFramのClose処理でブレイクする事よりWindowsからのメッセージで
アプリケーションを終了させているようです。
バッテリーが満タンでなくても電源を接続していなくてもアプリケーションを
起動させる方法はありませんか?
ちなみに、ノートPCはNECのLN500/9です。
どうぞよろしくお願いします。/ひろ
何だか状況がさっぱりわかりませんが
終了させられるのはあなたの作ったアプリケーションだけ?
それとも他のアプリケーションも巻き添えになってる?
電池駆動のノート機でソフト開発したことあるけど自作アプリだけ強制終了させられた
なんて経験は無いです(電池容量0でマシンごと落ちたならあるけど)
既に電池がへたっていて容量90%の表示でも残駆動時間が10秒とか、
そういうオチ?
すみません。
私の作ったアプリケーションだけです。
残駆動時間はたっぷりあります。
電源コンセントを抜いてしばらくするとアプリケーション
が終了します。
CMainFrame::OnClose() でブレイクポイントを設定しておくと
引っかかるので・・・Winからの終了メッセージのように伺えます。
ノートPCの電源管理もいろいろ試してみたのですが・・・
100%では全く問題なしで動作しております。/ひろ
OnClose って閉じる要求=ALT+F4とか右上×クリックとかで呼び出されます。
単に正常終了しているだけだと思われます。
誰が終了要求を発行しているか、が問題でしょうね。
自分自身が?Windows が?それとも他の何かが?
省電力関連のメッセージをハンドルしてますか?
省電力設定が「プレゼンテーション」でも同様ですか?
ウィルス対策ソフトとかFireWallとかと喧嘩してませんか?
全然心当たりはないのですが、私だったらやろうとすること。
まず、SDI(or MDI)のプロジェクトを新しく作り90%で動作確認。
これで落ちなかった場合、このアプリと、落ちるアプリとの間の
どこかに問題があるはずなので、落ちるアプリの機能をどんどん
削除していって、新規アプリに近づけていきます。
どこか途中で、削除したら落ちなくなったなら、削除した機能を
見直し、心当たりがなければ、その機能を復活させて
(ここで落ちることを一応確認)別の部分を削除します。
2分探索をうまく適用できれば、莫大な手間にはならないと思います。
tetrapodさん、たいちうさんありがとうございました。
ご指摘のとおりかとおもいます。
ソース内で省電力関係のメッセージを受け取ってclose処理
しておりました。
WM_POWERBROADCASTです。このメッセージを受け取って
正常に終了処理を実施していました。(申し訳ありません)
バッテリーを外すことでWindowsが異常を通知してくるようです。
ノートPCで実行する場合はこのメッセージによる電源断処理
を行わないようにするか、若しくはバッテリーのイベントに
よる処理を引数にて設定する必要があるようです。
いつも参考にさせていただくだけで・・・
今回はじめて質問したのですが非常に助かりました。
ありがとうございました。
たぶん WM_POWERBROADCAST で、変化の通知であるところの
PBT_APMPOWERSTATUSCHANGE が来てるだけなのでしょう。正しく無視/処理しましょう。
PBT_APMBATTERYLOW とか PBT_APMQUERYSUSPEND とかなら終了ってのもありかも
>若しくはバッテリーのイベントに
>よる処理を引数にて設定する必要があるようです
ということでしょうね。
# っていうか詳細見ないで即終了してたのか...