0

こんにちは、winapi の QueueUserAPC を使用して、別のスレッドで apc 関数呼び出しを呼び出しています。私の質問は、パラメーターを渡すためのベストプラクティスは何ですか。オブジェクトの有効期間と割り当て/割り当て解除の責任について言及しています。

DWORD WINAPI QueueUserAPC(PAPCFUNC pfnAPC, HANDLE hThread, ULONG_PTR dwData);

私は dwData を使用してパラメーターを渡し、ポインターをデータに渡しますが、それをどのように処理すればよいか疑問に思っていました。受信スレッドがそれを使い終わるまで、それが生きていることを確認する必要があります。スマート ポインターを使用して、使用されなくなったデータの割り当てを解除する必要がありますか?

私は、呼び出し元のスレッドとdeallocでの割り当てを推測します。受信は可能ですが、おそらくそれほど良いことではありません。

他にできることはありますか?受信スレッドがデータで完了したことを通知するためだけに、2つの間の同期を避けたいと思います...

ありがとう!

4

1 に答える 1

1

送信スレッドでの割り当てと受信スレッドでの割り当て解除は簡単ですが、リークする可能性があるという主な欠点があります。送信の失敗を処理しても、APC を実行する前に受信スレッドが終了する可能性があります。 .

おそらく、リークを回避する最も簡単な方法は、送信されたデータのキューを作成することです。スレッドごとにキューを作成し、スレッドが終了したら、スレッドキューをトラバースして、保留中のデータをすべて解放します。

しかし、いつものように、悪魔は細部に宿る...

于 2012-12-04T07:36:34.763 に答える