⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signalthread.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 H
字号:
#ifndef _SIGNALTHREAD_H_#define _SIGNALTHREAD_H_#include "thread.h"#include "sigslot.h"namespace utils_base {///////////////////////////////////////////////////////////////////////////////// SignalThread - Base class for worker threads.  The main thread should call//  Start() to begin work, and then follow one of these models://   Normal: Wait for SignalWorkDone, and then call Release to destroy.//   Cancellation: Call Release(true), to abort the worker thread.//   Fire-and-forget: Call Release(false), which allows the thread to run to//    completion, and then self-destruct without further notification.//  The subclass should override DoWork() to perform the background task.  By//   periodically calling ContinueWork(), it can check for cancellation.//   OnWorkStart and OnWorkDone can be overridden to do pre- or post-work//   tasks in the context of the main thread.///////////////////////////////////////////////////////////////////////////////class SignalThread : protected MessageHandler {public:  SignalThread();  // Context: Main Thread.  Call before Start to change the worker's priority.  void SetPriority(ThreadPriority priority);  // Context: Main Thread.  Call to begin the worker thread.  void Start();  // Context: Main Thread.  If the worker thread is not running, deletes the  // object immediately.  Otherwise, asks the worker thread to abort processing,  // and schedules the object to be deleted once the worker exits.  // SignalWorkDone will not be signalled.  void Destroy();  // Context: Main Thread.  If the worker thread is complete, deletes the  // object immediately.  Otherwise, schedules the object to be deleted once  // the worker thread completes.  SignalWorkDone will be signalled.  void Release();  // Context: Main Thread.  Signalled when work is complete.  sigslot::signal1<SignalThread *> SignalWorkDone;  enum { ST_MSG_WORKER_DONE, ST_MSG_FIRST_AVAILABLE };protected:  virtual ~SignalThread();  // Context: Main Thread.  Subclass should override to do pre-work setup.  virtual void OnWorkStart() { }    // Context: Worker Thread.  Subclass should override to do work.  virtual void DoWork() = 0;  // Context: Worker Thread.  Subclass should call periodically to  // dispatch messages and determine if the thread should terminate.  bool ContinueWork();  // Context: Worker Thread.  Subclass should override when extra work is  // needed to abort the worker thread.  virtual void OnWorkStop() { }  // Context: Main Thread.  Subclass should override to do post-work cleanup.  virtual void OnWorkDone() { }    // Context: Any Thread.  If subclass overrides, be sure to call the base  // implementation.  Do not use (message_id < ST_MSG_FIRST_AVAILABLE)  virtual void OnMessage(Message *msg);private:  friend class Worker;  class Worker : public Thread {  public:    SignalThread* parent_;    virtual void Run() { parent_->Run(); }  };  void Run();  Thread* main_;  Worker worker_;  enum State { kInit, kRunning, kComplete, kStopping, kReleasing } state_;};///////////////////////////////////////////////////////////////////////////////}  // namespace talk_base#endif  // _SIGNALTHREAD_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -