• 締切済み

WaitForSingleObject()でエラー

 初めまして、自分の知識不足で解決できないため、こちらに質問をさせてもらいます。  自分が保守をしているプログラムでエラーが出ているのですが、原因が分からず行き詰っています。  対象のプログラムは、マルチスレッド構成で、プログラム終了時にメインスレッドが他のスレッドをWaitForSingleObject()でチェックして全てのスレッドが終了していたら自分も終了してプログラムを終わらせています。  この時、あるスレッドへのWaitForSingleObject()で「WAIT_FAILED」が返り、GetLastError()で取得したエラーコードが「5:アクセス拒否」でした。  エラー自体も毎回起きるわけではなく、しかも同一の筐体では発生していないので、タイミング的な問題ではないかと考えているのですが、WaitForSingleObject()でこんなエラーが返るのは初めてで、お手上げ状態になっています。  プログラムは、C言語で作成しており、WindowServer2003/VisualStudio2005の環境からWindowsServer2012/VisualStudio2012にリコンパイルして動かしており、2003環境ではおきたことがなく、2012環境になってから発生しています。  チェック先のスレッドも、タイミング的にはスレッドで保持しているメモリをクリアした後に_endthread()を実行しているだけでなのですが、わな掛けとかしたくてもどこにすれば良いのか分からず、ここに質問をさせてもらいました。  どんなヒントでも良いので、アドバイスがあればお願いします。

みんなの回答

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

とりあえず、すべてのスレッドの開始・終了のタイミングでログを出してみるとなにかわかるかもしれません。 当てずっぽうでいくつか… ・そのスレッドの起動には成功していますか? ・そのスレッドのハンドルを参照しているのはそこだけですか? ・実行環境はOSが変わっただけですか? マシンも変わりましたか?

subarist0555
質問者

お礼

返信ありがとうございます。 ・スレッド自体の起動は成功しています。そうでないと処理が正しく動かなくなります。 ・他に対象スレッドにアクセス、参照してるのはありません。これは確認済です。 ・OS含めて、マシンの保守期限切れなので新規サーバーを構築しています。 取り敢えず、もうちょっとデバッガ等で内部処理を追えないか確 してみます。

関連するQ&A