次の方法で共有


synchronize

適用先メソッドへのアクセスの同期をとります。

[synchronize]

解説

C++ 属性 synchronize は、オブジェクトの適用先メソッドの同期をとるためのサポートを実装します。この同期では、適用先メソッドのアクセスを制御することによって、クラスのメソッドなど、共通のリソースを複数のオブジェクトで使用できます。

この属性によって挿入されたコードは、スレッド モデルで指定される適切な Lock メソッドを適用先メソッドの先頭で呼び出します。メソッドが終了すると、自動的に Unlock が呼び出されます。これらの関数の詳細については、「CComAutoThreadModule::Lock」を参照してください。

この属性を使用する場合は、同じ要素に対して coclassprogid、または vi_progid の各属性 (あるいは、これらの 1 つを表す別の属性) も適用する必要があります。1 つの属性を使用すると、ほかの 2 つは自動的に適用されます。たとえば、progid を適用すると、vi_progid および coclass も適用されます。

使用例

CMyClass オブジェクトの UpdateBalance メソッドに必要な同期を提供するコードを次に示します。

// cpp_attr_ref_synchronize.cpp
// compile with: /LD
#define _ATL_ATTRIBUTES
#include "atlbase.h"
#include "atlcom.h"

[module(name="SYNC")];

[coclass,
 threading(both),
 vi_progid("MyProject.MyClass"),
 progid("MyProject.MyClass.1"),
 uuid("7a7baa0d-59b8-4576-b754-79d07e1d1cc3")
]
class CMyClass {
   float m_nBalance;

   [synchronize]
   void UpdateBalance(float nAdjust) {
      m_nBalance += nAdjust;
   }
};

必要条件

属性コンテキスト

対象

クラス メソッド、メソッド

複数回の適用

不可

必要な属性

coclassprogidvi_progid の中から 1 つ以上

無効な属性

なし

属性コンテキストの詳細については、「属性コンテキスト」を参照してください。

参照

概念

COM 属性

ATL サンプル