• ベストアンサー

ThreadのHandleの取得方法を教えて下さい。

itohhの回答

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 一番簡単な方法は、スレッドを作成したときに取得する方法です。 CreateThread関数やAfxBeginThread関数の復帰値で取得できます。

COPY_ROBOT4
質問者

お礼

いつもitohhさんにお世話になってしまうばかりで、申し訳ないです。 スレッド取得はCreateThreadやAfxBeginThreadで取得できるのですね。始め自分で調べたときは、両方ともにThreadを作成すると書いてあったので、取得はできないのだと思ってました。 とっても勉強になりました。 いつもありがとございます。

関連するQ&A

  • スレッド一覧の取得

    こんにちわ。 VC6.0でWindowsNT4.0上で動作しているプロセス一覧及びスレッド 一覧を取得するツールを作成したいのですが、アドバイス下さい。 プロセス一覧に関しては、EnumProcessesを使用すればいいのかな? とめぼしはついたのですが、スレッド一覧の取得で壁に当たって います。 NT5.0以降であればCreateToolhelp32Snapshotなんかを使用して いけそうな感じもするのですが。 よろしくお願いします。

  • VC++2005のスレッド使用方法について

    現在、VC++2005 SP2にてDLLを作成しています。 DLLには一つスレッドがあり、開始関数が実行されれば、スレッドが起動。終了関数を実行すればスレッドを停止させたいと思っております。 関数を分けていますので、以下の内容をグローバルで宣言したいと考えています。 Thread^ oThread = gcnew Thread( gcnew ThreadStart( &CUart::ThreadProc ) );                                     ~~~~~~~~~~~~~~~~~~~~~~~~                                         実行関数です。 oThread->Start();  //開始関数のスレッド開始  oThread->Abort();  //終了関数のスレッド停止 現在、宣言をグローバルのところに配置して、ビルドすると エラー 1 error C3145: 'oThread' : グローバルまたは静的変数は、マネージ型 'System::Threading::Thread ^' を含むことはできません とエラーが発生してしまいます。 いろいろ調べましたが、なかなか進んでいない状態です。 使用方法が間違っているのでしょうか?申し訳ありませんが、教えてください。 もし、別の方法があればご教授願います。 よろしくお願いします。

  • 既存プロセスからプロセスのプライマリースレッドIDの取得方法

    いつもお世話になってます。 プロセスに関することで分からないことがあるため、どなたか御教授して下さい。 只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか? 具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。 対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。 CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。

  • win32 スレッドのハンドルついて

    windowsのスレッドについての質問です。 今、手元にある書籍のスレッドを作る節にCreateThread()関数を使ってスレッドを作るサンプルプログラムが載っています。 その中では CloseHandle()関数が一切呼ばれていません。 しかも、そのサンプルではいくつもスレッドを作り、そのスレッドはプログラム中でいくつも終了するようなものです。CloseHandle()は呼び出さなくても問題ないのでしょうか? しかし、ネットで調べてみるとCloseHandle()を呼び出さなくてはいけないということが書かれていました。 http://www.daccho-it.com/program/WinApi/thread.htm ↑ 参考にしたサイト そこでいくつか質問です。 プロセスが終了するときにスレッドのハンドルは自動的に閉じられるという認識で大丈夫でしょうか? CreateThread()、_beginthreadex関数はCloseHandle()を呼び出す必要があるで大丈夫でしょうか? となると、CreateThread()の戻り値は必ず変数に保存しておく必要があるということですか? 書籍のサンプルではCreateThread()の戻り値はどこにも保存していませんでした、保存しない場合ハンドルが作られないってことはさすがにないですよね? よろしくお願いします。

  • スレッド処理内での終了結果を知りたい

    VC++6.0(SP5)を使って、コマンドプロンプトのような処理を作成しています。  1.CreateProcess()でMS-DOSプロンプトを起動  2.CreatePipe()で実行コマンドの読み取り/終了監視スレッド用ハンドル作成  3.CreateThread()で実行コマンドの読み取り/終了監視スレッド作成  4.WriteFile()、ReadFile()を使っています。 'Dir'コマンド等を実行した際、通常プロンプトに表示されるメッセージを 読み取れてエディットボックスに表示できるのですが、異常/正常に関わらず 終了した時を取得したいのですが・・・。  (詳細)  1.WriteFile()を使って'Dir'コマンド実行  2.実行コマンドの出力が完了←この時点でコマンドプロンプトを終了させたい   ※WriteFile()関数の実行終了ではなく、'Dir'コマンド実行終了を知りたい 何方かご教授お願いします。

  • 自作関数内でウインドウハンドルを得る方法

    ウインドウハンドルを渡さない自作関数で、自分の元のウインドウ (オーナーウインドウというものだと思います)を得る方法を教えてください。 まず簡単に取得できるのは、自分の実行ファイルのパスやスレッドIDです。 ここからハンドルを得るにはどういう関数を使えばいいですか?

  • VC++ Workerスレッドを強制終了させる方法

    VC++6.0でwinアプリを作っています。 ダイアログベースで、ボタンを押すとワーカースレッドを実行し、ここでデータ処理をしています。 もし、スレッド中でデータ処理時間がかかってしまうと、これをスレッド外で強制的に終了させたいですが、出来るのでしょうか。 よろしくお願いします。

  • VC++コンソールアプリでのインスタンスハンドルの取得

    VC++コンソールアプリでのインスタンスハンドルの取得 VC++コンソールアプリケーションでインスタンスハンドルを取得しようとしているのですが、 HINSTANCE hi = (HINSTANCE)GetWindowLong(HWND_DESKTOP, GWL_HINSTANCE); を実行すると、NULLが戻ってきます。 どこかまずい部分があるのでしょうか。 なお、第一引数のウィンドウハンドルは不明なため、 いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。

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

    VCでスレッドの終了をしたいと考えてます。 自分自身のスレッドを終了するときは、AfxEndThread関数を使うようですが、動作中のスレッドを外から命令して終了させるときはどうすれば良いのか分からないです。教えていただけないでしょうか?

  • CWnd::OnTimerのスレッドの取得

    いつもお世話になっております。 1)CWnd::OnTimerのスレッドハンドルを取得したいのですが、CreateThread又はAfxBeginThreadで取得できますか? 2)普通、CreateThreadやAfxBeginTHreadでハンドルを取得できるようですが、なぜ作る関数が取得する機能を果たすのか疑問です。 3)CWnd::OnTimerの中身を見たいのですが、どのようにすれば見ることができますか? 知っている方がいましたら教えて下さい。