本ブログは更新を停止しました。Aerieをよろしくお願いいたします。
投稿カレンダーはJavaScriptが有効でない環境では使用できません。
αετο? / aetos / あえとす
シャノン? 誰それ。
埼玉を馬鹿にする奴は俺が許さん。
基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。
COMの泥沼へようこそ…ヒヒヒ。
どーにもわかんねぇことがあるんで訊いちゃおう。
投稿日時 : 2007年6月26日 20:28
1はMTAでうごく 2はSTAでうごく >MTAスレッドからSTAオブジェクトを作った数だけ、STAスレッドができちゃったりする? できない。
> 1はMTAでうごく > 2はSTAでうごく はむぅ? MTAとかSTAとかってゆーか、どのスレッドで? が疑問。 誰が作ったスレッドで? というべきか。
Inprocess &Native限定なら... STA=作成したスレッド以外でオブジェクトを使わないモデル MTA=作成したスレッド以外でもオブジェクトを使うモデル だから STAなスレッドはどこまでいっても STA。 MTAなスレッドはどこまでいっても MTA。 だと思うんだが、そんなことはないのか? 知識ベースが2000くらいで止まってるからなぁよくわからないやw
んー。。。何が言いたいのかよくわかんねーぞw<おれ!
おいらの認識は間違ってるのかなぁ・・・
> 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を持ったアプリケーションで使用することが前提ですので・・・。
Powered by: Copyright © αετος / aetos