/* * Copyright (c) 2015 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.
*/
// Represents a simple worker thread. class PlatformThread final { public: // Handle is the base platform thread handle. #ifdefined(WEBRTC_WIN) using Handle = HANDLE; #else using Handle = pthread_t; #endif// defined(WEBRTC_WIN) // This ctor creates the PlatformThread with an unset handle (returning true // in empty()) and is provided for convenience. // TODO(bugs.webrtc.org/12727) Look into if default and move support can be // removed.
PlatformThread() = default;
// Moves `rhs` into this, storing an empty state in `rhs`. // TODO(bugs.webrtc.org/12727) Look into if default and move support can be // removed.
PlatformThread(PlatformThread&& rhs);
// Copies won't work since we'd have problems with joinable threads.
PlatformThread(const PlatformThread&) = delete;
PlatformThread& operator=(const PlatformThread&) = delete;
// Moves `rhs` into this, storing an empty state in `rhs`. // TODO(bugs.webrtc.org/12727) Look into if default and move support can be // removed.
PlatformThread& operator=(PlatformThread&& rhs);
// For a PlatformThread that's been spawned joinable, the destructor suspends // the calling thread until the created thread exits unless the thread has // already exited. virtual ~PlatformThread();
// Finalizes any allocated resources. // For a PlatformThread that's been spawned joinable, Finalize() suspends // the calling thread until the created thread exits unless the thread has // already exited. // empty() returns true after completion. void Finalize();
// Returns true if default constructed, moved from, or Finalize()ed. bool empty() const { return !handle_.has_value(); }
// Creates a started joinable thread which will be joined when the returned // PlatformThread destructs or Finalize() is called. static PlatformThread SpawnJoinable(
std::function<void()> thread_function,
absl::string_view name,
ThreadAttributes attributes = ThreadAttributes());
// Creates a started detached thread. The caller has to use external // synchronization as nothing is provided by the PlatformThread construct. static PlatformThread SpawnDetached(
std::function<void()> thread_function,
absl::string_view name,
ThreadAttributes attributes = ThreadAttributes());
// Returns the base platform thread handle of this thread.
std::optional<Handle> GetHandle() const;
#ifdefined(WEBRTC_WIN) // Queue a Windows APC function that runs when the thread is alertable. bool QueueAPC(PAPCFUNC apc_function, ULONG_PTR data); #endif
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.