COMの初期化、終了処理のタイミング – プログラミング – Home

COMの初期化、終了処理のタイミング
 
通知
すべてクリア

COMの初期化、終了処理のタイミング


たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

たけです。

いつもお世話になっております。

COMの初期化、終了処理についてですが
どのタイミングで呼ぶべきでしょうか?

CoInitializeとCoUninitialize
を、COMをCoCreateInstanceする度に
呼んでも動くのでしょうが

アプリケーションを起動したときにCoInitializeして
終了するときにCoUninitializeした方が良い気もします。
また、この場合はアプリケーションクラス(CXXXApp)のコンストラクタ、デストラクタに
書くのが適当でしょうか?

ご教授下さい。

開発環境 VC6.0,Win2000


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

通常は、CWinApp::InitInstance()と
CWinApp::ExitInstance()で呼ぶのが良いと思います。

COMをアプリケーションの時々しか使わない一部の機能でのみ使うなら、
その機能の最初と最後で呼ぶのも良いかと思います。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

確かなソースは持ち合わせていませんが、マルチスレッドの場合、
各スレッドごとに初期化・終了すべきだという話を聞いたことがあります。

パフォーマンスを気にしないなら、Initialize と Uninitialize の回数の対応さえ
きちんとしていれば、呼びすぎても問題はないと思います。


返信引用
たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

ご回答ありがとうございます。

>通常は、CWinApp::InitInstance()と
>CWinApp::ExitInstance()で呼ぶのが良いと思います。
>COMをアプリケーションの時々しか使わない一部の機能でのみ使うなら、
>その機能の最初と最後で呼ぶのも良いかと思います。
シングルスレッドですが、あちこちで使用する機能です。
ということで、CWinApp::InitInstance()、CWinApp::ExitInstance()にしようかなと思いま
す。

>確かなソースは持ち合わせていませんが、マルチスレッドの場合、
>各スレッドごとに初期化・終了すべきだという話を聞いたことがあります。
これははじめて聞きました。
でも、マルチスレッドでやると、以下のようにならないのでしょうか?

スレッド1
Initialize
COM1処理
Uninitialize

スレッド2
Initialize
COM2処理
Uninitialize

↑が同時に動いていて、
スレッド1 Initialize
スレッド2 Initialize
スレッド2 COM2処理
スレッド2 Uninitialize
スレッド1 COM1処理 (この時点でUninitializeされているのでエラー?)


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> スレッド1 Initialize
> スレッド2 Initialize
> スレッド2 COM2処理
> スレッド2 Uninitialize ※
> スレッド1 COM1処理 (この時点でUninitializeされているのでエラー?)

※はあくまでスレッド2の Uninitialize なので、スレッド1には影響を及ぼさないも
のと思われ。


返信引用
たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

なるほど。
また、そのような理由から、スレッド毎に
初期化・終了するんでしょうね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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