イベントハンドルのリーク(?)

このQ&Aのポイント
  • イベントハンドルがリークしているのか状況を調査する方法
  • イベントハンドルのリークについての説明
  • イベントハンドルのリークが発生する可能性のある要因
回答を見る
  • ベストアンサー

イベントハンドルのリーク(?)

御世話になります。 別の質問 https://okauth.questionbox.jp.msn.com/qa7662007.html で、トラブってるプログラムがあります。(C++) (ハンドル数が増加する) そこで、Process Explorer の Handle view でみたところ、種類が"Event"となっているハンドルが増えている(リーク?)しているようです。(減っていかない) 言葉を素直に受け取ると、「イベントハンドルがリークしている」と言う解釈で良いのでしょうか? であるとすると、「イベントハンドルがリーク」する状況とはどういった状況なのでしょうか? 少なくとも、該当ソースの中にCreateEvent等によるイベントの作成は行っていないのですが・・・ どなたか何か思い当たる事があればご教授頂けると幸いです。 以上、よろしくお願いいたします。

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

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

ハンドルが関与するオブジェクトは何か使用されていないですか。 event, mutex, thread, process, semaphore など。 使用していれば、確実に CloseHandle() がコールされているかを調べてはどうでしょう。 ソースを見てわからなければ、ログを埋め込めばわかると思います。

prd5678
質問者

お礼

gentoo314 さん、回答有難う御座います。 また、御礼が遅くなってすみません。 ハンドルが関与するオブジェクトは色々使用しているみたいです。 ただ、最初に必要なオブジェクトを取得して、それを使いまわすので、CloseHandle() 等が走るのはプログラムの終了時になります。 ログ出力を増やして、暫く経過を見てみます。

関連するQ&A

  • 異なるプロセス間でのイベントハンドルの共有

    異なるプロセス間でのイベントハンドルの共有 WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。 (1) プロセスAで「本物」のプロセスハンドルを取得   DuplicateHandle(     GetCurrentProcess(),         GetCurrentProcess(),    // 疑似ハンドル     GetCurrentProcess(),     &RealProcessHandle,     // 本物のハンドル     0,     FALSE,     DUPLICATE_SAME_ACCESS   ); (2) プロセスAでイベントを作成   hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); (3) プロセスBでイベントハンドルを複製   DuplicateHandle(     RealProcessHandle,     // プロセスAが(1)で取得した本物のハンドル     hEvent,           // プロセスAが(2)で取得したイベントハンドル     GetCurrentProcess(),     &hNewEvent,         // プロセスBで利用するためのイベントハンドル     0,     FALSE,     DUPLICATE_SAME_ACCESS   ); 上記のプログラムを実行すると、(1)と(2)は成功するものの、(3)の時点でエラーになり、 GetLastErrorでは6(ハンドルの異常)が表示されます。 プログラムのどこが悪いのでしょうか? 尚、OpenEventによるイベントハンドル共有は、 イベントに名前をつけなくてはならない問題があり、利用しない方針です。

  • PSPの件でまだ解決していない者です

    PSPの件でまだ解決していない者です https://okauth.questionbox.jp.msn.com/qa6044981.html https://okauth.questionbox.jp.msn.com/qa6047116.html https://okauth.questionbox.jp.msn.com/qa6055707.html の質問でずっとお世話になっている者です。 未だに解決しておらず、少し困ったことも発生しました。 友人には悪いですが、少しメールの内容を公開します。 「弁償(借金)に関して」 >でも貸したのは俺だけど、壊したのは相手(取ったやつ)だぞ? >PSPを取り返せたら、お前から賠償金とれるよな?貸したとはいえ俺も被害者だし ↑ この部分がどうなるのか、全然分からないのですが。 >じゃあお前、PSPが壊されてなく、正常な状態で戻ってきたら? ↑ 多分、弁償金で購入するPSPが既にある状態で、かつ元自分のPSPが戻ってきたらどうなるの?と聞いているのだと思います。 基本的に、「↑」がついている部分がよく分かっていない部分です。 >>じゃあお前、PSPが壊されてなく、正常な状態で戻ってきたら?というのも、正直どうなるのか分かりません。 今までも多くの方にアドバイスなどをいただいてきて、非常にありがたく思っています。 これで解決するかは分かりませんが、もうしばらくの間アドバイスなどをいただけないでしょうか。 よろしくお願い致します。

  • PSPの件でお世話になっている者です

    PSPの件でお世話になっている者です https://okauth.questionbox.jp.msn.com/qa6047116.html https://okauth.questionbox.jp.msn.com/qa6044981.html 上記2つの質問でお世話になった者です。 友人は、PSPの中に入っている個人情報などのことを説明すると、ようやくことの重大さに気がついたようです。 そして、最悪の場合としての弁償も、本人は覚悟を決めているそうです。 今日で友人の学校も終わるということで、会える機会は減ってしまうそうですが、騙し取ったやつとメール交換は出来るそうです。 ちなみに、友人がソイツにPSPのことを聞くと「夏休みの間借りてるだけだから」といっているそうです。 借りるだけでなぜこちらにボロPSPが回ってこなくちゃいけないのか、非常に疑問になる部分でした。 僕は、多分夏休みが終わるまで貸してしまうと自然と自分のものと認識してしまう。ボロのPSPが手元にないから、と友人に説明しました。 多分、その説明をしたときに個人情報のことも話したと思います。 本当に今更と言う感じはするんですが、本当にこれでよかったのかな、という感じもします。 少し前までの「騙し取ったやつと直接対決」的な部分を除いては、間違っていなかったのだとも思うのですが。

  • タスクマネージャ上のハンドル数の増加

    お世話になります。 早速ですが、質問させて下さい。 現在Win XP + C++ で無停止システム(ウィンドウズのサービス)を作成・稼動テスト中です。 別プログラムからの指示により、サービス内でイメージ作成を行い、それをまた別のプログラム画面に表示させると言う処理を行うプログラムで、自動操作ツールにてテストを行っています。 3日ほど無停止で動かしてますが、タスクマネージャで見ると、このサービス(のプロセス)のハンドルが日に数個(1~3個程度)増え続けています。 メモリ使用量は見るタイミングによって増減はするものの、一定レベルの値で安定しています(様に見えるだけ?) 一応、メモリリークのバグは無いつもりなのですが・・・ そこで質問ですが、 1)メモリ量は増加しないのに、ハンドルが増えていく状況とは、内部的にどの様な状態が考えられるでしょうか?(やはりハンドルリーク?) 2)これをこのまま放置すると、やはりハングしたりするのでしょうか?   (GDIオブジェクトは10,000でハングするらしいですが) 3)この原因を究明する方法は無いでしょうか?   _CrtDumpMemoryLeaks なんかは使ってみたのですが、プログラムの終了時にはリークは表示されませんでした。 以上、よろしくお願いたします。

  • 2番目の女です。と質問したものです。

    こんにちは。 https://okauth.questionbox.jp.msn.com/qa8450681.html で質問したものです。 あれから 彼からの電話はなくなり 昨日メールが入ってきました。 内容は 彼女に何かあったら そっちにいってしまう 私の事は やっぱり2番目に考えてしまう もう 嫌いになったか?でも 君の事も気になるよ…。 でした。 これは 終わりにしたいって事ですよね。 なので お別れのメールを 私から送って 今日連絡先を消しました。 彼は 彼女がいるので 電話番号などは聞いておらず LINEのIDだけで繋がっていました。 なので 私はLINEのアカウントを消しました。 住んでる場所も遠いし これで二度と彼とは会えないです。 そう思うと 楽しかった事ばかり思い出して 辛いです。 でも 彼には彼女がいるので 私がいなくなっても 何とも思わないですよね。 それなのに 吹っ切れていない私は おかしいですか?

  • 違法ですか・・・?

    以前、https://okauth.questionbox.jp.msn.com/qa8407715.html で ダウンロードについて質問しました。 ヒットゲームや、人気曲のダウンロードは 違法であるかどうか・・・ という 内容です。 「違法である」という回答が戻ってきました。 そこで、似ているかも知れない質問です・・・ もう、店では見つからない ゲームソフトや もう、店では見つからない ゲーム機を ダウンロードする事は、いけない事でしょうか? (エミュレータのダウンロード) いろいろと、調べてみたのですが、 なかなか、この質問の答えになるものが ページに載ってませんでした。 回答、よろしくお願いします!!!! ゲームは、特に N64、GBA、SFC、FCくらいです。

  • 忘れているのか、あえて触れないようにしてるのか?

    以前、質問させて頂きその時は回答ありがとうございました。 https://okauth.questionbox.jp.msn.com/qa7157245.html 今回続きといいますか、思いきって手紙を渡したのですが それについては何も触れて来ませんでした。 内容は、好きですとかメアドなど連絡先は記載してません。 「○○さんが担当でうれしかったです。これから 残り少ないですがよろしくお願いします。といった 内容です。 でも、勿論リハビリ(仕事)と患者という立場でしたので 手紙渡した後3週間の開きがあったのですが 別にいつもと変わらず爽やかな対応でした。 私の気持ちとしては思いきって渡したので 手紙ありがとうございました、的な 感想を期待していたのですが・・・ この方は、何故手紙の事には触れてこなかったのでしょうか? 手紙を渡した時は「どうもありがとうございます。後でゆっくり 読ませて頂きます」とニコっとして迷惑そうでもなかったので。 皆さまのご意見お聞かせ下さい。

  • ダイアログを終了させてもハンドルが1つ増加したまま。。。

    VC++のMFCを使ってダイアログベースのEXEを造っています。 ハンドルのリークが発生し、困っています。 <動作内容> メインのダイアログで、ボタン押下により別のダイアログを表示します。 DoModal()でモーダルダイアログを作成します。 別のプロセスからブロードキャストされるメッセージを処理したいため、 ボタン押下のルーチンで DoModal() せずに、スレッドを作成し、 そのスレッドで DoModal() を実行しています。 スレッド作成は AfxBeginThread() を使用しています。 <サンプルソース> ●メインダイアログ // ボタン押下のルーチン void CTestModalDlg::OnButton1() { AfxBeginThread( TestDlgThread, (LPVOID)this, THREAD_PRIORITY_NORMAL ); } // スレッド static UINT TestDlgThread(LPVOID pThis) { CTestDlg1 Dlg; Dlg.DoModal(); } ●DoModal() で表示されるダイアログ 何も手を加えてない、デフォルトのまま。 <結果> DoModal() で表示されたダイアログを CDialog::OnCancel() で終了させ、 メインのスレッドが終了しても、ハンドルカウントが1つ増加しています。 Sleep() を入れて値をみてみると、 ・スレッド作成:2増加 ・DoModal() でダイアログ表示:1増加 ・OnCancel() で終了:増減なし ・スレッド終了:2減少 =>結果、1増加となっていました。 以下のパターンでは問題ありませんでした。 ・スレッドを作成+終了(ダイアログ表示しない) ・スレッドを作成せずに、ボタン押下ルーチンから DoModal() でダイアログ表示+終了 ということで、AfxBeginThread()、DoModal() 自体は問題ないのですが、 スレッドを作成して DoModal() するとリークが発生します。 識者の方、原因、対策など、ご教授願います。

  • 平方根のかけ算

    https://okauth.questionbox.jp.msn.com/qa7837038.html こちらで質問していた者ですが、質問を変更します。 √a×√b=√ab (a≧0,b≧0,a∈R,b∈R、その他の場合は一般に成立しない)です。 複素数を導入し、負の数の平方根を採用し、複素幾何について触れないものとして、 √a×√b=√ab がa<0,b<0,a∈R,b∈Rの時に成立「しない」ことを証明してください。 規約的回答は個人の好みにより求めません。 (例:√abは√a×√b (a≧0,b≧0,a∈R,b∈R)の数として定義され、それ以外では未定義であるから成立しない)

  • なぜ「相対論的質量」を使わないことにしたのか?

    「相対論的質量」は,1質点の運動について考察する段階では 確かに無用の長物で,その点でテキストでもほとんど使われなく なった経緯はある程度理解しています。 http://ja.wikipedia.org/wiki/%E7%9B%B8%E5%AF%BE%E8%AB%96%E7%9A%84%E8%B3%AA%E9%87%8F#.E7.9B.B8.E5.AF.BE.E8.AB.96.E7.9A.84.E8.B3.AA.E9.87.8F しかし一方で,構成粒子の熱運動によって質量は増加するのでは ないかと解釈しています。そして,この増加は各構成粒子について 上記の「相対論的質量」を適用することによって説明されると 思います。 https://okauth.okwave.jp/qa4343665.html http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1419005364 もし上のような考察に疑義があればご指摘いただきたいと思います。 また,上の考察が正しいものであるならば,なぜ「相対論的質量」 の概念を放棄したのでしょうか?

専門家に質問してみよう