次の方法で共有


HrThisThreadAdviseSink

適用対象: Outlook 2013 | Outlook 2016

スレッド セーフの既存のアドバイズ シンクをラップするアドバイズ シンクを作成します。

プロパティ
ヘッダー ファイル:
Mapiutil.h
実装元:
MAPI
呼び出し元:
クライアント アプリケーション
HrThisThreadAdviseSink(
  LPMAPIADVISESINK lpAdviseSink,
  LPMAPIADVISESINK FAR * lppAdviseSink
);

パラメーター

lpAdviseSink

[in]ラップするアドバイズ シンクへのポインター。

lppAdviseSink

[out] lpAdviseSink パラメーターが指すアドバイズ シンクをラップする、新しいアドバイズ シンクへのポインターへのポインター。

戻り値

なし。

注釈

ラッパーの目的は、 HrThisThreadAdviseSink 関数を呼び出したのと同じスレッドで通知が呼び出されることを確認することです。 この関数は、特定のスレッドで実行する必要がある通知コールバックを保護するために使用されます。

クライアント アプリケーションでは、HrThisThreadAdviseSink を使用して、通知が生成されるタイミング、つまり、前のアドバイズ呼び出しでクライアントによって渡されたアドバイズ シンク オブジェクトの IMAPIAdviseSink::OnNotify メソッドに対する呼び出しが行われるタイミングを制限する必要があります。 通知を任意に生成できる場合、通知の実装では、クライアントが適切でない場合に、マルチスレッド操作が強制される可能性があります。 たとえば、クライアントは、マルチスレッド呼び出しをサポートしていないライブラリ (Microsoft Foundation クラス ライブラリのいずれかなど) を使用する場合があります。 別のスレッドでの通知によって、このようなクライアントのテストが困難になり、エラーが発生しやすくなります。

HrThisThreadAdviseSink は、 OnNotify 呼び出しが次の適切な時間にのみ発生することを確認します。

  • MAPI メソッドへの呼び出しの処理中。

  • Windows メッセージの処理中。

HrThisThreadAdviseSink が実装されると、新しいアドバイズ シンクの OnNotify メソッドを任意のスレッドで呼び出すと、HrThisThreadAdviseSink が呼び出されたスレッドで元の通知メソッドが実行されます。

通知とアドバイズ シンクの詳細については、「 MAPI でのイベント通知 」および「 アドバイズ シンク オブジェクトの実装」を参照してください。