マルチスレッド処理中にDAOを使うとエラーになります – プログラミング – Home

マルチスレッド処理中にDAOを使うとエ...
 
通知
すべてクリア

[解決済] マルチスレッド処理中にDAOを使うとエラーになります


TAR
 TAR
(@TAR)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

現在、Win2000Pro + VC++6.0で開発をしています。

MFCのAfxBeginThreadで起動したスレッド内で、CDaoDatabaseのOpenでAccess97形式のMDBを
開き、そのままCloseで開放しようとすると、プログラム終了時に以下のエラーが出て困ってい
ます。

<エラーメッセージ>
バンドルされていない例外はtest.exe(DAO350.DLL)にあります: 0xC0000005: Access
Violation。

マルチスレッド処理中でない場所でCDaoDatabaseを使ってもエラーは出ません。
DAOは、マルチスレッド処理中に使ってはいけないのでしょうか。
もし、そうであれば、マルチスレッド処理中でMDBを開いても大丈夫な処理方法はないものでし
ょうか。

以上、ご存知の方はよろしくお願いいたします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

同じスレッド内でOpen/Closeしていますか?


返信引用
TAR
 TAR
(@TAR)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

dairygoods殿

>同じスレッド内でOpen/Closeしていますか?
はい、やっています。


返信引用
藤本(み)
 藤本(み)
(@藤本(み))
ゲスト
結合: 22年前
投稿: 7
 

http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%
82%B9%E3%83%AC%E3%83%83%E3%83%89+dao


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

プログラム終了時にスレッドはきちんと終了していますか


返信引用
TAR
 TAR
(@TAR)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

>プログラム終了時にスレッドはきちんと終了していますか
ちゃんと終了しているつもりです。と言っても、AfxBeginThreadから抜けるのを待つだけ
ですよね?
メモリリークもしてないし・・・。


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

>ちゃんと終了しているつもりです。と言っても、AfxBeginThreadから抜けるのを待つだけ
>ですよね?

違いますよ。
メインプログラムを終了する前に、スレッドの終了を確認してください。
AfxBeginThreadの後、メインプログラムとスレッドが非同期に動作しますので
AfxBeginThreadから抜けたらスレッドの開始をしただけで終了とは違います。

グローバル変数で終了用のフラグを使って終了確認をされてはいかがですか。


返信引用
TAR
 TAR
(@TAR)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

>グローバル変数で終了用のフラグを使って終了確認をされてはいかがですか。
すいません、説明が足りませんでした。
スレッド終了後は、CEventクラスによりシグナル状態にしています。

この問題の対処は、なかなか難しいようですね。
DAOをスレッド内で使うのは止めて、スレッド間通信でMDBにアクセスするしかないのでしょう
か。それとも、どうしてもスレッド内からMDBにアクセスする場合は、接続方法の見直し(例え
ば、ODBC接続にするとか)を考えたほうがよいのでしょうか。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

>DAOをスレッド内で使うのは止めて、スレッド間通信でMDBにアクセスするしかないので
しょうか。

DAO の使用が必須なら、それが安全です。

>それとも、どうしてもスレッド内からMDBにアクセスする場合は、接続方法の見直し
(例えば、ODBC接続にするとか)を考えたほうがよいのでしょうか。

DAO にこだわる理由がなければ、それがイチバン簡単でしょう。

ADO を使うのでは駄目なんですか?


返信引用
TAR
 TAR
(@TAR)
ゲスト
結合: 22年前
投稿: 15
Topic starter  

>ADO を使うのでは駄目なんですか?
現在、ADOに変更してMDBにアクセスしています。
どうも、マルチスレッド処理中にDAOを使うのはダメっぽいです。

皆様、いろいろとアドバイスいただき、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました