マルチスレッドの状態監視方法と便利なツールについて

このQ&Aのポイント
  • マルチスレッドプログラミングにおいて、スレッドの状態を監視する方法や便利なツールはあるのでしょうか?
  • Visual Studioを使用してスレッドの状態を監視する方法があるかどうか、またそれ以外にも定番のツールや便利なツールが存在するか教えてください。
  • マルチスレッドプログラミングの経験が少ないため、おすすめの書籍やリソースなども合わせて教えていただけると助かります。
回答を見る
  • ベストアンサー

スレッドの監視方法

MFCを使ってマルチスレッドプログラミングを行う予定です。 そこで質問なのですが、皆さんがマルチスレッドのプログラミングを行う際 どのようにしてスレッドの状態を監視していますか? VisualStudio中にスレッドの状態を監視する方法があるのでしょうか? また、スレッドの状態を監視する定番ツールのようなものはあるのでしょうか? 定番ではなくても便利なツールがあったら有料でも構いませんので教えて下さい。 マルチスレッドプログラミングは少ししか経験がありません。 お勧めの書籍などあったら教えて頂けると助かります。 どうぞ宜しくお願い致します。 環境:WindowsXP + VS6のMFC(後にVS2100使用予定)

  • ken2r
  • お礼率88% (82/93)

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

  • ベストアンサー
回答No.2

ツリー表示ではないのですが、Process Explorer でプロセスを選択してプロパティを表示し、 Thread ダブを表示するとスレッド一覧が表示されます。 http://technet.microsoft.com/ja-jp/sysinternals/bb896653

ken2r
質問者

お礼

ご回答有難うございました。 返信遅れて申し訳ありませんでした。早速使ってみます。

その他の回答 (1)

  • gentoo314
  • ベストアンサー率41% (15/36)
回答No.1

状態の監視とは何を意味しているのでしょうか。 シングルスレッドの開発と特に違いはありません。 デバッグなら、スレッドの入り口でブレークポイントを張っておけばいいですが。

ken2r
質問者

補足

>状態の監視とは何を意味しているのでしょうか 起動したスレッドをツリービューなどで視覚的に表示してくれるソフト があったら開発時にデバッガと併用したいなと考えていました。 ご存知でしたら教えて下さい。

関連するQ&A

  • プロセスとスレッドの違いについて(Cプログラミングの観点から)

    プロセスとスレッドの違いがしっくりきません。 <プロセス> (1)プログラムの実行単位。Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される (2)起動や切り替えのオーバーヘッドが大きい <スレッド> (1)同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できる。 (2)マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。 等はwiki等調べて理解しています。 何が疑問なのかと申し上げますと、具体的にプログラミングする際に (1)マルチプロセスとマルチスレッド方式では、ソースにどのような違いが出てくるか (2)マルチプロセスとマルチスレッド方式では実行時間がどれだけ変化するか がわからないのです。お仕事で並列処理等について担当されている方などおられましたら、お手数ですがご教授ください。 なお、わかりやすい書籍、webサイト等ありましたらそれも併せて教えていただけると助かります。よろしくお願いします。ちなみに、環境はWindowsXP,VisualC++ExpressEdition2005を使っていますので、UNIXよりはWindowsかつCで動くプログラム例で教えていただけると大変助かります。しかし、当方Javaも多少であれば組めますのでJavaでも構いません。 何卒、よろしくお願い致します。

  • インスタンスとスレッドの違い

    Javaカテゴリでお訊きすることではないとも思うのですが、今、Javaを勉強中で、その中でもマルチスレッドの段階に入ってきたので、こちらで質問させて頂きました。 インスタンスとスレッドって、要は何が違うのでしょうか。 当方はプログラミング歴自体は、C言語で仕事で10年以上やっていて、その中では、組み込みもやりましたから、当然マルチスレッド環境のソフトにも関わってきましたが、 スレッドの原理的な制御部分はできあがった状態でプロジェクトに参入することが多く、担当を任されたスレッドの中で(要は閉じた中で)の仕事経験しかありません。 そこにきて今、Javaをゼロから勉強してみると、あくまでインスタンスとスレッドは分けて表現されており、 私も本を読み進めてみて、感覚的にはわからないではないですが、ちょっと立ち入った説明になると、双方がごっちゃになりわからなくなってしまいます。 どなたかお教え頂けませんか。 Javaの文法的なことは一通り勉強しましたし、C言語の素地もあるので、難しめの話でも結構ですし、たとえ話でも結構です。よろしくお願いします。

  • マルチスレッド間でデータ交換をする方法

    マルチスレッドの知識がないままに、プログラミングをする必要が出てしまったのですが、書籍などで調べても分からない部分があるため、質問いたします。 Win32APIを用いて(MFCは使用しない)、WindowsでVC7.0環境です。 やりたいことは、 スレッドAとスレッドBを生成し、 スレッドAの終了時点で、スレッドBがスレッドA内部で生成したクラスのインスタンスを取得するというものです。(もしくはその逆) スレッドAとB自体もクラスで構成しており、内部で生成されるインスタンスはグローバルではないため、スレッドBからスレッドAを見えるような仕組みが必要なのでしょうか?? まだイメージだけの段階で、ソースコードで表現できなくて申し訳ないのですが、簡単にご教授くださる方、もしくは参考になるサイトを教えてくださる方がいらっしゃいましたら、お願いいたします!

  • マルチスレッドプログラミングの良技術書籍

    C++言語を用いてマルチスレッドを用いた開発を行う予定ですが、 当方マルチスレッドを用いた開発の経験がなく、 事前に前提知識を付けておきたいと思うのですが、 マルチスレッドプログラミングにおいて、 この書籍が分かりやすい、もしくはバイブル的な書籍があれば、 ご教示お願い致します。 ちなみに開発環境はVC++2005です。

  • マルチスレッドプログラミングの参考書

    スレッドやプロセスなどの意味は理解しているつもりです。 実際プログラミングをする技術を身につけたいと思っていますが おすすめの、勉強(参考)となる書籍はありますでしょうか? プラットフォームはLinux系です。 pthreadやselectを使用できればよいです。 最終的にどんなことがしたいかといいますと マルチスレッド対応したソケットプログラムを 作ってみたいのです。 シングルスレッドであれば、ある程度作れるのですが マルチスレッドではどのように作成していいのか・・・ 参考になりそうなHPでもいいのでよろしくお願いします。

  • C# スレッドから親ウィンドウへの通知の方法は?

    昔、MFC C++を少しかじったことがあります。 今、システム部門のお手伝いに駆り出され、 C#を勉強しながら久しぶりにプログラミングをしています。 スレッドから、そのスレッドの呼び出し元である親ウィンドウに対し、 状態の変化を通知するような場合、 C#ではどのように実現するのがふつうなのか教えてください。 例として、以下のような簡単な処理を考えます。 あるダイアログウィンドウに、2つのボタン[Start][End]があるとします。 初期状態では、[Start]が有効、[End]が無効です。 [Start]を押すと、複数のスレッドを起動し何かしらの処理を開始します。(*1) [End]を押すと、それらのスレッドに方法はともかく終了指示を送ります。(*2) (*1)ですべてのスレッドが起動すると[End]を有効/[Start]を無効とし、 逆に(*2)ですべてのスレッドが終了すると[Start]を有効/[End]を無効とします。 これらの処理を行うため、各スレッドは、呼び出し元親ダイアログウィンドウに対し、 起動直後には起動した旨を、終了直前には終了する旨の通知をします。(*3) ダイアログウィンドウでは、各スレッドからのこれらの通知を受け取り、 すべてのスレッドから通知が届き終わった際に、 [Start]や[End]のEnabledを操作して有効化/無効化します。 このとき、(*3)では、MFC C++では、WinPostMessage というものを使い、 ウィンドウメッセージ(WM_***)を送って通知する方法を利用していました。 C#でもPostMessageは使えるようなのですが、あまり使いやすくないようです。 これは、そもそもあまり使うものではないためだと思います。 現在はイベントを使っています。 PostMessageのようなものの場合はキューを介しますから、 postする側とメッセージを受け取る側は非同期になりますが、 イベントの場合は一連の処理を終えてイベントの呼び出し元に戻るまで復帰しませんよね? そこで質問なのですが、このような処理の場合、 つまり、スレッドから親ウィンドウへの通知は、 C#ではどういうふうに実現するのが一般的なのでしょうか? 上記のような例の場合、非同期で動作させたいと思うのですが...。 どなたか教えてください。 お願いします。

  • マルチスレッドのデバッグ

    Eclipseでマルチスレッドプログラミングをしています。 アプリケーションの特性上スレッド数が非常に多く、普通に実行すると稀にデッドロックが起きるが、デバッグの手順によってはそのバグが表れなかったりして、自分自身が効率良くデバッグを行えていない気がします。 Eclipseでデバッグをするにあたり、何か知っておくと便利な機能等ありますか? 現在はスレッドを全て停止して、ちまちまと1つずつStep in/over しています。 オブジェクトの待機プールにどのスレッドが入っているかを知りたいのですが、知る方法ってあるでしょうか?

    • ベストアンサー
    • Java
  • VisualStudioでのプログラム勉強(初心者)

    数ヶ月前、プログラミングに興味を持ち、いろいろ調べてみてC++言語を習得したいと思いVisualStudio .NETを購入しました。 しかしいろいろといそがしく、特に何もできずに今に至ったのですが、夏休みということもあり、じっくりとプログラミング学習に打ち込めそうです。 書籍は「Cの絵本」「C++の絵本」というものをVisualStudio購入に合わせて買ったので、そこに載っていた本当に基本的なことは理解しているつもりです。 当面の目標はMFCを使ったGUIのプログラムを作ることができるようになることなのですが、どのようなことをしたらよいのか分かりません。 そのようなことが解説されているサイトをご存知の方、教えてください。 もしくは、アドバイスをお願いします。 プログラミングの経験はなく、HTMLくらいです。

  • MFCの静的リンク

    WindowsXP + VisualStudio2008 を使ってMFCアプリを作成中です。 また、ActiveXなどは使わずにプログラムのコピーだけで配布できるものを作成しようとしています。 そこで質問なのですが、 MFCだけ使ったプログラムを配布する時、MFCを静的リンクしてしまえば、 他のDLLなどは一緒に配布する必要はないのでしょうか? MFCやネイティブプログラミングに詳しい方がいましたら教えて下さい。 どうぞ宜しくお願い致します。

  • Win32APIでのスレッド処理

     こんにちは。 質問ですが、自分の環境はWindowsXP SP3 VisualStudio.NET2005 でのC++でのプログラミングです。 まず、スレッド作成をするために、_beginthreadexを用いているのですが、このやり方で、5,6個のスレッドを作成すると処理が逆に重くなってしまいました。 このスレッドは排他制御をしていないものです。 以下にソースの一部を載せます。 ///////////////////////// // スレッド作成 BOOL TestFunc::ThreadRegist(void) { UINT thID = 0; if((hThread = (HANDLE)_beginthreadex(NULL, 0, &TestFunc::tRunLauncher, this, 0, &thID)) == 0) { return FALSE; } return TRUE; } ///////////////////////// // スレッド void TestFunc::ThreadRun(void) { ras.Sprite(ene.d, ene.m, ene.s);//処理の重い画像処理 thflag = true; _endthreadex(0); } // これがクラス class TestFunc : public CTEST01 { bool rasf; bool thflag; WORD set; EffectRaster ras; double RX, RY; HANDLE hThread; static UINT WINAPI tRunLauncher(void* vp) { reinterpret_cast<TestFunc*>(vp)->ThreadRun(); return 0; } void ThreadRun(); BOOL ThreadRegist(); public: TestFunc(double x, double y, WORD type); }; このオブジェクトを多くて5~6個作っています。 上記の場所をスレッドにしない場合、逆に処理が軽くなるんです。 スレッドが5から6個でも処理が重ければ影響が出るのでしょうか? しかしそれでもスレッドにしない場合より重くなる理由が分からないでいます。   詳しい方がいらっしゃいましたらどうぞよろしくお願い致します。 m( )m