アプリを終了してもプロセスタブから消えないのは何故? – 固定ページ 3 – プログラミング – Home

アプリを終了してもプロセスタブから消え...
 
通知
すべてクリア

[解決済] アプリを終了してもプロセスタブから消えないのは何故?

固定ページ 3 / 4

ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>②③の追求・解決は、何度も言いますが、無理です。
無理だと思ってはいけないと思います。
個人のフリーソフトに時間的制限はないのでいくらでも出来るはずですね。

> 成功です!
> これでフリーソフトを作り直します。
Lhaca、秀丸で行っていますが、別系統のソフトにしてバ-ジョンアップ
したほうがいいですね。
「よかったら換えて使ってみてください」
てなかんじでどうですか。
今までのは残しておいたほうがいいですね。
ユーザーがびっくりします。

> ですが、このソフトは趣味で作っていますので、FormViewの切り替えの方
> がスマートだと思った今、これで作りたくてしょうがありません。(^o^)
趣味だという考え方はまずいですね。いくらフリ-でも配布してかつユーザーが使って
いるのですからただスマートだからだけの意味での改版はまずいです。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

なんでこんなに質問者を追い詰めてんだろうか?

ネットの向こう側の環境でしか再現できない状況に対し
これ以上の「原因追求」の方法を教えてあげればいいのに・・・


返信引用
ほんちゃん
 ほんちゃん
(@ほんちゃん)
ゲスト
結合: 16年前
投稿: 13
Topic starter  

ryo さん、応援有り難うございます。

ここの返答数が現在32件。
移動する前の「Programming Library 」での書き込み数が35+6=41件。
合計73件。
ギネスブックに載らないかナ (^_^)
楽しんでいます。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

今回の場合は、個人がその個人の責任範囲でやっていることなので
ご本人の判断で良いと思いますよ。
何処まで責任を持つかまで含めてが開発ですし。

で、色んな意見はあって良いと思いますし、
ITOさんの考え方もほんちゃんさんの考え方もあってよいのでは?
その人のそのソフトに対するスタンスですから最後に決めるのは
御本人ですからね。

で、
> なんでこんなに質問者を追い詰めてんだろうか?
と取るかどうかもまた御本人しだいでしょう。
意見として書き込む分には問題ないと思いますよ。
ITOさんの意見にしてもそうしろとは書いていないです。
そう思うと書いてあるとは思いますけれど。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

>>②③の追求・解決は、何度も言いますが、無理です。
>無理だと思ってはいけないと思います。
>個人のフリーソフトに時間的制限はないのでいくらでも出来るはずですね。
ほんちゃんさんの時間的制約はないとしても
②の問題はユーザーさんに協力をしてもらい続けないといけないので
「いくらでも出来るはず」は違うと思います


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

PATIOさん有難うございます。

>なんでこんなに質問者を追い詰めてんだろうか?
なんか、「フリーソフトだからいいじゃん。」ってかんじがしたもので
つい意見してしまいました。
作るほうも使うほうも楽しんでもらわないと作っているかいがないと
思います。
いつまでも作ってよかったと思ってほしいです。


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

ほんちゃん さんへ。
アプリケーションを終了してもプロセス・タブから消えない状態が
再現できました。下の方法なら必ずプロセス・タブに残ります。
※こちらの環境は Windows XP Home SP2、VC2003 SDK(非MFC)です。

プロシージャを次のようにするとプロセス・タブに残ります。
LRESULT CALLBACK mainWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
lParam )
{
switch ( uMsg ){
case WM_CREATE:
/* 何かの処理 */
break;
case WM_DESTROY:
/* 何かの処理 */
break;
default:return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
return 0;
}

通常 WM_DESTROY メッセージで PostQuitMessage( 0 );を記述します。
でも PostQuitMessage( 0 ); を記述しないとアプリケーション・タブからは
消え(ウインドウも消える)、プロセス・タブには確実に残ります。

MFCには詳しくありませんが、同様な理由でプロセス・タブから消えない状態が
出来上がっているのかもしれません。もう一度ソースを調べてみて下さい。

あと興味がある方は一度テストしてみて下さい。
たまたま僕の環境だけで再現できているかどうか
それともすべての環境で再現できるのか。
僕は興味があったので書き込んでみました。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

ウィンドウが消えるのとプログラムが終了するのはイコールじゃないからね。


返信引用
T
 T
(@T)
ゲスト
結合: 21年前
投稿: 27
 

>>金魚ちゃん さん

これは見当違いでしょ


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

> ウィンドウが消えるのとプログラムが終了するのはイコールじゃないからね。
イコールとは言っていないんですけど。
ウインドウは消えるけどプログラムがプロセス・タブに残ります。
だからプログラムが終了しなかった現象を再現できた。
と書き込んだのですが…。

> これは見当違いでしょ
こちらも僕の書き方が悪いせいか伝わらなかったようです。
プログラムはメモリ上(プロセス・タブ)に残っています。
もちろんウインドウは消えているので終了したように見えますが…。

僕の環境だけでしょうか?
wclrp ( 'o') さん、Tさんの環境ではどうですか?


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

もう少し分かりやすく書きます。

LRESULT CALLBACK mainWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
lParam )
{
switch ( uMsg ){
case WM_CREATE:

break;
case WM_DESTROY:

break;
default:return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
return 0;
}
この単純なプロシージャでプロセス・タブに残る現象が再現できました。

> これは見当違いでしょ
本当に見当違いでしょうか?
こちらの環境ではタスクマネージャのアプリケーション・タブからは消え、
プロセス・タブにはプログラムがまだ残っています。
何度も確認しました。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

別に間違っているって指摘したわけじゃないけど。

関係あるかどうかは私にはわかりません。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

MFCではプログラマがPostQuitMessageを記述しなくても
自分がメインウィンドウのときPostQuitMessageを呼び出す処理がすでにあったはず。
//面倒なのでそのソースは探しません。


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

さっき思ったんだけどPostQuitMessageを呼び出さないと全ての環境で
プロセス・タブにプログラムが残っちゃうよね。多分?

似たような動作を再現できたと思ったけど見当違いだったようです。
失礼しました。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

 よくある話が、通信やファイルI/Oを同期モードで処理しているとき
タイムアウトの設定を誤って処理が残ってしまうことですね。
 ぼくは、このごろ通信は非同期モードでフラグでWaitForSingleObjectのループから
抜け出すようにしてますね。

> さっき思ったんだけどPostQuitMessageを呼び出さないと全ての環境で
> プロセス・タブにプログラムが残っちゃうよね。

「WM_CLOSE」や「WM_DESTROY」(特にWM_DESTROY」)で上の同期モードから
抜けるのを待っていると金魚ちゃん さんのいっている現象が当たるか知れないですね。
どうしても同期モードで行いたいならタイムアウトの設定を厳密に行うのと、
同期モードの処理をスレッドで行い、指定時間に復帰しなければ「TerminateThread」等
で強制終了させるか(マイクロソフトはあまり推奨していない。)を行うかですね。

 タイマールーチン等で同期モード等の無限ループに入ってしまった場合は、
例外が発生しますね。


返信引用
固定ページ 3 / 4

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました