123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #ifndef RTC_BASE_DEPRECATED_SIGNAL_THREAD_H_
- #define RTC_BASE_DEPRECATED_SIGNAL_THREAD_H_
- #include <string>
- #include "rtc_base/checks.h"
- #include "rtc_base/constructor_magic.h"
- #include "rtc_base/critical_section.h"
- #include "rtc_base/deprecation.h"
- #include "rtc_base/message_handler.h"
- #include "rtc_base/third_party/sigslot/sigslot.h"
- #include "rtc_base/thread.h"
- #include "rtc_base/thread_annotations.h"
- namespace rtc {
- class DEPRECATED_SignalThread : public sigslot::has_slots<>,
- protected MessageHandler {
- public:
- DEPRECATED_SignalThread();
-
- bool SetName(const std::string& name, const void* obj);
-
- void Start();
-
-
-
-
-
- void Destroy(bool wait);
-
-
-
- void Release();
-
- sigslot::signal1<DEPRECATED_SignalThread*> SignalWorkDone;
- enum { ST_MSG_WORKER_DONE, ST_MSG_FIRST_AVAILABLE };
- protected:
- ~DEPRECATED_SignalThread() override;
- Thread* worker() { return &worker_; }
-
- virtual void OnWorkStart() {}
-
- virtual void DoWork() = 0;
-
-
- bool ContinueWork();
-
-
- virtual void OnWorkStop() {}
-
- virtual void OnWorkDone() {}
-
-
- void OnMessage(Message* msg) override;
- private:
- enum State {
- kInit,
- kRunning,
- kReleasing,
- kComplete,
- kStopping,
- };
- class Worker : public Thread {
- public:
- explicit Worker(DEPRECATED_SignalThread* parent);
- ~Worker() override;
- void Run() override;
- bool IsProcessingMessagesForTesting() override;
- private:
- DEPRECATED_SignalThread* parent_;
- RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Worker);
- };
- class RTC_SCOPED_LOCKABLE EnterExit {
- public:
- explicit EnterExit(DEPRECATED_SignalThread* t)
- RTC_EXCLUSIVE_LOCK_FUNCTION(t->cs_)
- : t_(t) {
- t_->cs_.Enter();
-
-
- RTC_DCHECK_NE(0, t_->refcount_);
- ++t_->refcount_;
- }
- ~EnterExit() RTC_UNLOCK_FUNCTION() {
- bool d = (0 == --t_->refcount_);
- t_->cs_.Leave();
- if (d)
- delete t_;
- }
- private:
- DEPRECATED_SignalThread* t_;
- RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(EnterExit);
- };
- void Run();
- void OnMainThreadDestroyed();
- Thread* main_;
- Worker worker_;
- CriticalSection cs_;
- State state_ RTC_GUARDED_BY(cs_);
- int refcount_ RTC_GUARDED_BY(cs_);
- bool destroy_called_ RTC_GUARDED_BY(cs_) = false;
- RTC_DISALLOW_COPY_AND_ASSIGN(DEPRECATED_SignalThread);
- };
- typedef RTC_DEPRECATED DEPRECATED_SignalThread SignalThread;
- }
- #endif
|