2017-01-29 8 views
0

すべてのサブフォルダ内のアカウント内の特定のメール(、再帰的に)を検索する簡単な検索を作成しようとしています。MAPI SetsearchCriteria対Restrict vs FindRw

iが登録されたコールバックがfnevSearchCompleteフラグを使用して署名されるまで私は精通だ現在の方法は、SearchFolder + SetSearchCriteria + AdviseCallback +大型のGetMessageループです。

メールが10Kを超えるアカウントの場合、検索処理で多くのリソース(CPU時間は&)が消費され、厄介なGetMessageループによってすべてがブロックされます。すべてのサブフォルダ(複数のテーブル)内を検索し、今までに見つかったメールを同時に収集する方法はありますか?

答えて

0

メッセージループ(GetMesage/TranlateMesage/DispatchMessage)を実行しないでください。コンテンツテーブルの通知(まだ起動します)を使用するか、定期的にタイマーを使用して検索フォルダをポーリングしてください。

+0

テーブル通知でこれを行うように管理しましたが、次の方法に関するいくつかの質問がありました。検索条件が毎回30行を取得する可能性がありますか? IAdviseSink :: OnNotify :: CNotifyで示されるように? さらに重要なのは、LPNOTIFICATIONポインタの寿命はどれくらいですか?私はScDupPropsetを使用してコールバックにimmeaditlyすべてをコピーするか、SendMessageを別のスレッドに処理するためにポインタを送信するのが安全でしょうか?私の参照は次のとおりです:MSDN、MFCMapi :: AdvNotify()どのSendMessageをContentsTableListCtrl.cpp :: msgOnAddItem –

+1

のLPNOTIFICATIONポインタは、コールバック内でのみ有効です。 SendMesageを使用している場合は、呼び出しは同期的なので、構造を複製する必要はありませんが、通知が長すぎると通知が失われる可能性があります。構造の重複を避け、PostMessageを使用してイベント通知からできるだけ早く戻る方が良いでしょう。 –

+0

偉大な、助けをありがとう –

関連する問題