OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

スレッドの終了はどうやるんですか?

  • すぐに回答を!
  • 質問No.133827
  • 閲覧数930
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (7/7)

VCでスレッドの終了をしたいと考えてます。
自分自身のスレッドを終了するときは、AfxEndThread関数を使うようですが、動作中のスレッドを外から命令して終了させるときはどうすれば良いのか分からないです。教えていただけないでしょうか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 45% (210/459)

こんにちは。itohhといいます。

スレッドを終了させる方法は結構難しいですよ。

TerminateThread 関数を使用すれば、とりあえず強制終了させることは出来ます。
ただし、MSDNライブラリーにも記載されていますが、危険な方法です。
この関数で終了させられたスレッドは、終了処理が出来ません、ということは、
メモリリークを起こす可能性が大です。

一番まともな方法は、WM_CLOSEを対象スレッドにPostMessageすることです。
この場合は、メッセージループを内蔵するユーザーインターフェイススレッド
にする必要があります。
またこの場合でも、デッドロックしているスレッドでは、終了できないと思います。

わたしが、良く行う方法は、
ワーカースレッドの場合:
  ・シグナルを使用して、適時チェックする。(それなりに遅くなるのが難点)
  ・自然に終わるのを待つ。
ユーザーインターフェイススレッドの場合:
  ・WM_CLOSEを対象スレッドにPostMessageする。(デッドロックしないようなロジックにする)
お礼コメント
COPY_ROBOT4

お礼率 100% (7/7)

お忙しいところ、ありがとうございました。
スレッドを外から終了させる方法は、まだ検討中なのですが、今のところ、TerminateThread関数を使う予定です。
値の取得、書き込み、描画の処理があるのですがそれぞれに、セマフォを使ってロックし、ロックが終了したタイミングでTerminateThread関数を放とうと計画中です。まだ、VCを触り始めたばかりなので、できるか心配です。でもがんばります。ありがとうございました。
投稿日時 - 2001-09-14 20:57:49
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル9

ベストアンサー率 40% (43/105)

動作中のスレッドは常にある変数を監視し、 その変数がある決められた値になった場合に自ら終わるようにする。 外部からスレッドを終了させる場合は、その変数の値を変更するようにする。 かな。 ...続きを読む
動作中のスレッドは常にある変数を監視し、
その変数がある決められた値になった場合に自ら終わるようにする。
外部からスレッドを終了させる場合は、その変数の値を変更するようにする。
かな。
お礼コメント
COPY_ROBOT4

お礼率 100% (7/7)

アドバイスありがとうございました。
違う案が聞けて勉強になりました。
お忙しい中、ありがとうございました。
投稿日時 - 2001-09-17 22:16:17


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ