スレッド終了について – プログラミング – Home

通知
すべてクリア

[解決済] スレッド終了について


森山
 森山
(@森山)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

ユーザインターフェーススレッドを作成するAfxBeginThreadでは、パラメタで指定した
クラスのインスタンスを作るということでしょうか?
それを終了する場合のPostQuitMessageやAfxEndThreadのスレッド終了とExitInstanceの
インスタンス終了では意味が違うのでしょうか?ご教示お願いします。


引用未解決
トピックタグ
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 21年前
投稿: 33
 

>ユーザインターフェーススレッドを作成するAfxBeginThreadでは、パラメタで指定した
>クラスのインスタンスを作るということでしょうか?

そうです。

>それを終了する場合のPostQuitMessageやAfxEndThreadのスレッド終了とExitInstance

>インスタンス終了では意味が違うのでしょうか?ご教示お願いします。

PostQuitMessage() は、ユーザインターフェーススレッド(=通常、メッセージポンプ
を持ちます)が、自身を終了することをシステムに知らせるために呼び出します。

PostQuitMessage() によってメッセージポンプは停止し、所定の終了処理を実行した後
にスレッドは終了します。その過程で ExitInstance() が呼び出されます。

これに対して、AfxEndThread() を呼び出すと、そのスレッドは所定の終了処理を実行す
ることなく終了してしまいます。


返信引用
森山
 森山
(@森山)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

渋木さん回答ありがとうございます。

AfxBeginThreadでインスタンスが作られるということは、AfxBeginThreadで生成したス
レッドを、PostQuitMessageやAfxEndThreadでなくてもExitInstanceでも終了できるとい
うことですか?
再度ご教示お願いします。


返信引用
あきら
 あきら
(@あきら)
ゲスト
結合: 23年前
投稿: 49
 

http://forums.belution.com/ja/vc/000/125/
ここみれ。


返信引用
森山
 森山
(@森山)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

すいません。よくわからなかったのですが。。。

PostQuitMessageでExitInstanceが呼ばれるのでよいということでしょうか?
それともその他の処理が行われないからだめということでしょうか?


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 21年前
投稿: 33
 

>AfxBeginThreadでインスタンスが作られるということは、
>AfxBeginThreadで生成したスレッドを、PostQuitMessageやAfxEndThread
>でなくてもExitInstanceでも終了できるということですか?

できません。


返信引用
森山
 森山
(@森山)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

AfxBeginThreadでは、クラスが新たにできるのではなく、インスタンスがつくられると
いうことですよね?
ではなぜExitInstanceでは終了できないのでしょうか?
何度もすいませんがお願いします。


返信引用
とおり
 とおり
(@とおり)
ゲスト
結合: 21年前
投稿: 43
 

>AfxBeginThreadでは、クラスが新たにできるのではなく、インスタンスがつくられると
>いうことですよね?
>ではなぜExitInstanceでは終了できないのでしょうか?

この発言からするに、「ExitInstanceという名前」と「インスタンスを終了させる」と
「スレッドを終了させる」がごちゃごちゃになっているように思えます。
自分でExitInstance()を呼び出そうとしているんでしょうか?
ユーザーインタフェーススレッドは、通常のメインスレッドがウィンドウズメッセージを
処理する仕組みと全く同じように動きます。メインスレッドに対して、自分でExitInstance()
を呼び出したりするんですか?
という時点で、わからないなら、ウィンドウズアプリの基本的な挙動を勉強すべきかと。

あと、MSDNのCWinThread::ExitInstance()やAfxBeginThead()の解説はちゃんと読みました
か?
ここに終了のさせ方等いろいろ書いてあると思いますが…


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

http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/vclib/html/_mfc_CWinThread.3a3a.ExitInstance.asp
MSDNには呼ぶな!と書いてあるしThreadを終了させるものとは書いてないから
これを呼ぶことで終了はできないでしょう。
使ったこと無いのでよくわからないのですが多分ただの終了時に呼び出される
関数でInitInstanceあたりでした初期化処理の後片付け用じゃないのかな?


返信引用
森山
 森山
(@森山)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

色々ご回答ありがとうございます。
最後に下記について教えてください。
MSDNには、ExitInstanceはスレッドのインスタンスを終了させるために呼び出される
とかいてありますが、スレッドのインスタンスとはどういう意味でしょうか?


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

ここまで話が進んでいるにも拘らず、スレッドのインスタンスがわからんというのが
良く分からないんですが、
言葉のままの意味だと思います。
そのスレッドのインスタンスです。
スレッドが動作している事とスレッ
ドのインスタンスが存在する事は同意ではありません。
というか、スレッドとインスタンスという単語の意味から考えれば
想像できると思うのですが、言い過ぎ?


返信引用
謎の怪鳥
 謎の怪鳥
(@謎の怪鳥)
ゲスト
結合: 21年前
投稿: 12
 

えっと、
ExitInstanceメンバ関数は、CWinThreadクラスにおける
終了処理において、フレームワーク(MFC)により
「呼び出される」ものです。
なので、ExitInstanceメンバ関数を呼び出したからといって、
スレッドが終了するわけではありません。

ExitInstanceメンバ関数の中に記述されている処理を
実行したいのなら、直接ExitInstanceメンバ関数を
呼び出すのではなく、PostQuitMessage()を実行して、
スレッドを終了させ、フレームワークに
「実行させる」必要があります。


返信引用
森山
 森山
(@森山)
ゲスト
結合: 21年前
投稿: 6
Topic starter  

ご回答ありがとうございました。
理解できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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