19 #ifndef INCLUDE_RCF_THREADMANAGER_HPP 20 #define INCLUDE_RCF_THREADMANAGER_HPP 29 #include <RCF/AsioFwd.hpp> 30 #include <RCF/Export.hpp> 31 #include <RCF/ThreadLibrary.hpp> 32 #include <RCF/Timer.hpp> 37 typedef std::function<void(int)> Task;
39 typedef std::function<void()> StopFunctor;
42 typedef std::shared_ptr<ThreadPool> ThreadPoolPtr;
46 typedef std::shared_ptr<ThreadPool> ThreadPoolPtr;
49 class RCF_EXPORT ThreadInfo
52 ThreadInfo(ThreadPool & threadPool);
55 ThreadPool & getThreadPool();
58 friend class ThreadPool;
59 friend class ShouldStop;
61 ThreadPool & mThreadPool;
63 bool mStopFlag =
false;
64 bool mAlreadyRemovedFromThreadPool =
false;
65 RCF::Timer mTouchTimer;
68 typedef std::shared_ptr<ThreadInfo> ThreadInfoPtr;
76 static const MuxerType DefaultMuxerType = Mt_Asio;
80 public std::enable_shared_from_this<ThreadPool>
84 typedef std::function<void()> ThreadInitFunctor;
85 typedef std::function<void()> ThreadDeinitFunctor;
90 ThreadPool(std::size_t threadMinCount, std::size_t threadMaxCount);
93 void setThreadMinCount(std::size_t threadMinCount);
96 std::size_t getThreadMinCount()
const;
99 void setThreadMaxCount(std::size_t threadMaxCount);
102 std::size_t getThreadMaxCount()
const;
107 void setThreadIdleTimeoutMs(std::uint32_t threadIdleTimeoutMs);
110 std::uint32_t getThreadIdleTimeoutMs()
const;
115 void setReserveLastThread(
bool reserveLastThread);
116 bool getReserveLastThread()
const;
119 void setThreadName(
const std::string & threadName);
122 std::string getThreadName()
const;
134 void addThreadInitFunctor(
135 ThreadInitFunctor threadInitFunctor);
138 void addThreadDeinitFunctor(
139 ThreadDeinitFunctor threadDeinitFunctor);
141 AsioIoService * getIoService();
145 std::size_t getThreadCount();
147 void setTask(Task task);
148 void setStopFunctor(StopFunctor stopFunctor);
150 void enableMuxerType(MuxerType muxerType);
154 bool shouldStop()
const;
160 void setMyThreadName();
162 bool launchThread(std::size_t howManyThreads = 1);
167 RCF::ThreadInfoPtr threadInfoPtr,
170 void cycle(
int timeoutMs, ShouldStop & shouldStop);
172 friend class TaskEntry;
175 mutable Mutex mInitDeinitMutex;
176 std::vector<ThreadInitFunctor> mThreadInitFunctors;
177 std::vector<ThreadDeinitFunctor> mThreadDeinitFunctors;
178 std::string mThreadName;
179 std::shared_ptr<AsioMuxer> mAsioIoServicePtr;
182 std::size_t mThreadMinCount;
183 std::size_t mThreadMaxCount;
184 bool mReserveLastThread;
185 std::uint32_t mThreadIdleTimeoutMs;
188 StopFunctor mStopFunctor;
192 typedef std::map<ThreadInfoPtr, ThreadPtr> ThreadMap;
196 std::size_t mBusyCount;
197 Condition mAllThreadsStopped;
200 class ThreadTouchGuard
206 ThreadInfoPtr mThreadInfoPtr;
214 ThreadInfoPtr threadInfoPtr);
216 bool operator()()
const;
221 ThreadInfoPtr mThreadInfoPtr;
224 RCF_EXPORT
void setWin32ThreadName(
const std::string & threadName);
228 #endif // ! INCLUDE_RCF_THREADMANAGER_HPP Provides RCF server-side functionality.
Definition: RcfServer.hpp:54
Represents a server-side thread pool.
Definition: ThreadPool.hpp:79
Definition: AmiIoHandler.hpp:24