1

COM オブジェクトが STA スレッドで作成されたとします。したがって、このオブジェクトへのすべての呼び出しは、このスレッドでシリアル化されます。したがって、オブジェクトのメソッドがブロックされている場合、このオブジェクトを使用するすべてのスレッドがブロックされます。

では、STA COM オブジェクトにブロッキング メソッドを持つことは、避けるべき設計上の欠陥なのでしょうか?

COM オブジェクトがフリー スレッドの場合、ブロッキング メソッドを使用しても問題ありませんか?

ありがとう

4

1 に答える 1

0

はい、シングルスレッドアパートメントのオブジェクトはメッセージを介して同期され、それらへのすべての呼び出しは、そのようなオブジェクトでいつでも1つのメソッドしか呼び出せないようにシリアル化されます(また、メソッドを複数回呼び出すことはできません)いつでも)。これは仕様によるものであり、ある程度のスレッドセーフを実現するために行われます。デッドロックを導入しない限り、メソッドを長時間実行すること自体は大きな問題ではありません。はい、発信者は呼び出しが順番に実行されるまで待機します。

マルチスレッドアパートメント内のオブジェクトはメッセージを介して同期されません-そのようなオブジェクトへのすべての呼び出しは同期なしで直接行われるため、複数のメソッドを任意のオブジェクトでいつでも並行して呼び出すことができ、オブジェクトはスレッドセーフを確保します。もちろん、メソッドは内部をブロックできますが、デッドロックが発生しないように注意する必要があります。

于 2011-06-07T05:12:31.223 に答える