66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
|
|
/*
|
||
|
|
* Copyright 2018 The WebRTC Project Authors. All rights reserved.
|
||
|
|
*
|
||
|
|
* Use of this source code is governed by a BSD-style license
|
||
|
|
* that can be found in the LICENSE file in the root of the source
|
||
|
|
* tree. An additional intellectual property rights grant can be found
|
||
|
|
* in the file PATENTS. All contributing project authors may
|
||
|
|
* be found in the AUTHORS file in the root of the source tree.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef RTC_BASE_CANCELABLE_TASK_HANDLE_H_
|
||
|
|
#define RTC_BASE_CANCELABLE_TASK_HANDLE_H_
|
||
|
|
|
||
|
|
#include "rtc_base/scoped_ref_ptr.h"
|
||
|
|
#include "rtc_base/task_queue.h"
|
||
|
|
|
||
|
|
namespace rtc {
|
||
|
|
|
||
|
|
class BaseCancelableTask;
|
||
|
|
|
||
|
|
// Allows to cancel a cancelable task. Non-empty handle can be acquired by
|
||
|
|
// calling GetCancellationHandle() on a cancelable task.
|
||
|
|
class CancelableTaskHandle {
|
||
|
|
public:
|
||
|
|
// This class is copyable and cheaply movable.
|
||
|
|
CancelableTaskHandle();
|
||
|
|
CancelableTaskHandle(const CancelableTaskHandle&);
|
||
|
|
CancelableTaskHandle(CancelableTaskHandle&&);
|
||
|
|
CancelableTaskHandle& operator=(const CancelableTaskHandle&);
|
||
|
|
CancelableTaskHandle& operator=(CancelableTaskHandle&&);
|
||
|
|
// Deleting the handler doesn't Cancel the task.
|
||
|
|
~CancelableTaskHandle();
|
||
|
|
|
||
|
|
// Prevents the cancelable task to run.
|
||
|
|
// Must be executed on the same task queue as the task itself.
|
||
|
|
void Cancel() const;
|
||
|
|
|
||
|
|
private:
|
||
|
|
friend class BaseCancelableTask;
|
||
|
|
class CancellationToken;
|
||
|
|
explicit CancelableTaskHandle(
|
||
|
|
rtc::scoped_refptr<CancellationToken> cancelation_token);
|
||
|
|
|
||
|
|
rtc::scoped_refptr<CancellationToken> cancellation_token_;
|
||
|
|
};
|
||
|
|
|
||
|
|
class BaseCancelableTask : public QueuedTask {
|
||
|
|
public:
|
||
|
|
~BaseCancelableTask() override;
|
||
|
|
|
||
|
|
CancelableTaskHandle GetCancellationHandle() const;
|
||
|
|
|
||
|
|
protected:
|
||
|
|
BaseCancelableTask();
|
||
|
|
|
||
|
|
bool Canceled() const;
|
||
|
|
|
||
|
|
private:
|
||
|
|
rtc::scoped_refptr<CancelableTaskHandle::CancellationToken>
|
||
|
|
cancellation_token_;
|
||
|
|
};
|
||
|
|
|
||
|
|
} // namespace rtc
|
||
|
|
|
||
|
|
#endif // RTC_BASE_CANCELABLE_TASK_HANDLE_H_
|