タスク キューのクリーンアップの例
このトピックでは、リソースのリークを避けるために、必要がなくなったタスク キューをクリーンアップする方法の例を示します。 ただし、タスク キューをすぐに解放することはできません。 最初に終了してフラッシュし、それに対してエンキューされたものが実行されたことを確認してから、解放します。
終了呼び出しは、待機するように設定することも、すぐに返すこともできます。 コールバックを待機していない場合、必要に応じて、終了が完全に完了したときに通知を受け取るように指定することができます。 手動ポートがある場合は、ディスパッチ関数が返るまで、そのポートは引き続きディスパッチされる必要があります。
XTaskQueueTerminate(taskQueue, false, nullptr, nullptr);
bool result;
do
{
result = XTaskQueueDispatch(taskQueue, XTaskQueuePort::Completion, INFINITE);
} while (result == true);
XTaskQueueCloseHandle(taskQueue);
この例では、タスク キューを終了しますが、XTaskQueueTerminate の Wait パラメーターを使用して待機することはありません。
terminate
呼び出しによって各ポートに 1 つのコールバックが追加され、キューが空になるタイミングが検出されます。 これと以前にエンキューされたコールバックについては、false
を返すまで dispatch
が継続的に呼び出されます。