Add rtc::Thread::PostDelayedTask
Earlier, rtc::Thread::PostTask was added as a convenient
alternative to MessageHandlers. This CL additionally adds support
for posting delayed tasks in a similar manner.
Bug: webrtc:10294
Change-Id: I0957b59ca2133a882c980bd2ad109fa03d701a16
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161740
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30069}
diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc
index 90be695..7335af7 100644
--- a/rtc_base/thread.cc
+++ b/rtc_base/thread.cc
@@ -63,6 +63,24 @@
#endif
namespace rtc {
+namespace {
+
+class MessageHandlerWithTask final : public MessageHandler {
+ public:
+ MessageHandlerWithTask() = default;
+
+ void OnMessage(Message* msg) override {
+ static_cast<rtc_thread_internal::MessageLikeTask*>(msg->pdata)->Run();
+ delete msg->pdata;
+ }
+
+ private:
+ ~MessageHandlerWithTask() override {}
+
+ RTC_DISALLOW_COPY_AND_ASSIGN(MessageHandlerWithTask);
+};
+
+} // namespace
ThreadManager* ThreadManager::Instance() {
static ThreadManager* const thread_manager = new ThreadManager();
@@ -612,6 +630,13 @@
#endif
}
+// static
+MessageHandler* Thread::GetPostTaskMessageHandler() {
+ // Allocate at first call, never deallocate.
+ static MessageHandler* handler = new MessageHandlerWithTask;
+ return handler;
+}
+
AutoThread::AutoThread()
: Thread(SocketServer::CreateDefault(), /*do_init=*/false) {
if (!ThreadManager::Instance()->CurrentThread()) {