私はWINAPI ThreadPoolを閉じることについて質問があります。WINAPIを正しく閉じる方法スレッドプールを保留中のタスクをキャンセルする
私は、クリーンアップグループを持つスレッドプールを初期化し、SubmitThreadpoolWorkを使用してスレッドプールにいくつかのタスクをプッシュしたとします。 タスクのコールバック関数でCloseThreadPoolTaskを呼び出しています。
現在、実行中のタスクとスレッドプールのキューに保留中のタスクがあります。 私はCloseThreadpoolCleanupGroupMembers関数を使用して、キューに入れられたタスクが完了するまで待たずに、を使用したいと思っていますが、依然として保留中のタスクのコールバックを取得して、タスクのパラメータ)。 Cancelling scheduled work/io/timer items in WIN32 thread pool
私はクリーンアップグループ(PTP_CLEANUP_GROUP_CANCEL_CALLBACK)に合格したコールバックはまた、彼らはまだ中にクリーンアップグループに結び付けられているため、現在(実行されているオブジェクトを作業するために呼び出すこと:私はこのスレッドで見た
実行) - 明らかに私はそれが起こることを望んでいません...クリーンアップキャンセルコールバックが現在実行中のタスクで呼び出されない方法はありますか?
ありがとうございます!
お返事ありがとうございました! 私はあなたが言ったことに従ってこの事をテストしました。私は明確にする別のポイントがあります。 1つのスレッドでプールを使用し、1分間スリープする5つのタスクをプッシュしました。 CloseThreadpoolCleanupGroupMembersを呼び出した後、スレッドが終了した後にのみクリーンアップの取り消しコールバックが呼び出されました とその作業は4回だけ呼び出されました(保留中のジョブの場合のみ) – sborpo