123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /**
- * libdatachannel streamer example
- * Copyright (c) 2020 Filip Klembara (in2core)
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- */
- #ifndef dispatchqueue_hpp
- #define dispatchqueue_hpp
- #include <thread>
- #include <mutex>
- #include <condition_variable>
- #include <queue>
- #include <functional>
- #include <string>
- class DispatchQueue {
- typedef std::function<void(void)> fp_t;
- public:
- DispatchQueue(std::string name, size_t threadCount = 1);
- ~DispatchQueue();
- // dispatch and copy
- void dispatch(const fp_t& op);
- // dispatch and move
- void dispatch(fp_t&& op);
- void removePending();
- // Deleted operations
- DispatchQueue(const DispatchQueue& rhs) = delete;
- DispatchQueue& operator=(const DispatchQueue& rhs) = delete;
- DispatchQueue(DispatchQueue&& rhs) = delete;
- DispatchQueue& operator=(DispatchQueue&& rhs) = delete;
- private:
- std::string name;
- std::mutex lockMutex;
- std::vector<std::thread> threads;
- std::queue<fp_t> queue;
- std::condition_variable condition;
- bool quit = false;
- void dispatchThreadHandler(void);
- };
- #endif /* dispatchqueue_hpp */
|