Out of Memory

本ブログは更新を停止しました。Aerieをよろしくお願いいたします。

目次

Blog 利用状況

ニュース

2009年3月31日
更新を停止しました。引き続きAerieを御愛顧くださいませ。
2009年2月3日
原則としてコメント受付を停止しました。コメントはAerieまでお願いいたします。
詳細は2月3日のエントリをご覧ください。
2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

αετο? / aetos / あえとす

シャノン? 誰それ。

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

書庫

日記カテゴリ

スレッド@COM

COMの泥沼へようこそ…ヒヒヒ。

どーにもわかんねぇことがあるんで訊いちゃおう。

わかんねぇこと その1
STAスレッドからMTAオブジェクトのメソッドを呼んだら?
MTAオブジェクトのメソッドが実行されるスレッドは、CoInitializeEx( NULL, COINIT_MULTITHREADED ) したスレッドとは限らず、COMが管理するスレッドプールのスレッドで呼ばれる?
呼び出し元のSTAスレッドで呼ばれることはないと思うけど…。
わかんねぇこと その2
MTAスレッドからSTAオブジェクトを作って呼んだら?
STAスレッドが勝手に作られて、そのスレッドコンテキストで実行される?
MTAスレッドからSTAオブジェクトを作った数だけ、STAスレッドができちゃったりする?

投稿日時 : 2007年6月26日 20:28

Feedback

# re: スレッド@COM 2007/06/26 21:51 中博俊

1はMTAでうごく
2はSTAでうごく
>MTAスレッドからSTAオブジェクトを作った数だけ、STAスレッドができちゃったりする?

できない。

# re: スレッド@COM 2007/06/27 10:18 シャノン

> 1はMTAでうごく
> 2はSTAでうごく

はむぅ?
MTAとかSTAとかってゆーか、どのスレッドで? が疑問。
誰が作ったスレッドで? というべきか。

# re: スレッド@COM 2007/06/27 11:49 とっちゃん

Inprocess &Native限定なら...
STA=作成したスレッド以外でオブジェクトを使わないモデル
MTA=作成したスレッド以外でもオブジェクトを使うモデル
だから
STAなスレッドはどこまでいっても STA。
MTAなスレッドはどこまでいっても MTA。

だと思うんだが、そんなことはないのか?
知識ベースが2000くらいで止まってるからなぁよくわからないやw

# re: スレッド@COM 2007/06/27 11:50 とっちゃん

んー。。。何が言いたいのかよくわかんねーぞw<おれ!

# re: スレッド@COM 2007/06/27 22:08 中博俊

おいらの認識は間違ってるのかなぁ・・・

# re: スレッド@COM 2007/06/28 18:27 Atata!!

> STAスレッドからMTAオブジェクトのメソッドを呼んだら?
> MTAオブジェクトのメソッドが実行されるスレッドは、CoInitializeEx( NULL, COINIT_MULTITHREADED ) したスレッドとは限らず、COMが管理するスレッドプールのスレッドで呼ばれる?

この認識で正しいです。呼び出した時に空いているMTAのスレッドで実行されます。
無ければスレッドが新しく生成されたとどこかで読んだ気がします。


> MTAスレッドからSTAオブジェクトを作って呼んだら?
> STAスレッドが勝手に作られて、そのスレッドコンテキストで実行される?

この認識も正しいです。STAスレッドが作成され、そのスレッドコンテキストで実行されます。


> MTAスレッドからSTAオブジェクトを作った数だけ、STAスレッドができちゃったりする?

基本的に1つのSTAスレッドにすべてのSTAオブジェクトが生成されます。
と言うのはあまり正確ではなく、インプロセスのコンポーネントのスレッドモデルで指定できるのは
Single、Apartment、Free、Both、Neutralの5つですが、
MTAから作成した場合、SingleとApartmentはそれぞれ別のSTAスレッド上に作成されます。
結果、作成されるSTAスレッドは最大で2つ(Single用STA、Apartment用STA)となります。

ただし、プロセスを開始した時の最初のスレッド(以下メインスレッド)をSTAとして初期化した場合、
SingleとApartmentのオブジェクトはすべてメインスレッド上に作成されます。


# メインスレッドをMTAで初期化し別のスレッドをSTAで初期化した場合、
# メインスレッドでSingleスレッドモデルのオブジェクトを
# 作成しようとするとデッドロックを起こして固まります。
# まぁ、基本的にSingleスレッドモデルのオブジェクトは
# UIを持ったアプリケーションで使用することが前提ですので・・・。

タイトル
名前
Url
コメント