#pragma once #ifndef _ASYNCDOWNLOADMANAGER_HPP_ #define _ASYNCDOWNLOADMANAGER_HPP_ #include #include #include #include #include #include namespace bumbleBee { /// @brief 싱글톤 멀티스레딩 다운로드 매니저 class [[deprecated]] AsyncDownloadManager { public: static AsyncDownloadManager& getInstance(int worker_count, std::weak_ptr weak_cluster) { static AsyncDownloadManager dl(worker_count); dl.weak_cluster = weak_cluster; return dl; } void enqueue(std::pair query) { std::thread th(&bumbleBee::AsyncDownloadManager::enqueueAsyncDL, this, query); th.detach(); } void stop() { auto cluster = weak_cluster.lock(); cluster->log(dpp::ll_info, "AsyncDownloadManager stop/destructor called."); terminate = true; dlQueueCondition.notify_all(); for (auto& t : worker_thread) { t.join(); } } ~AsyncDownloadManager(){ stop(); } private: AsyncDownloadManager(int worker_count){ worker_thread.reserve(worker_count); terminate = false; for (int i=0; idownloadWorker();}); } } void enqueueAsyncDL(std::pair query); void downloadWorker(); std::queue> downloadQueue; std::condition_variable dlQueueCondition; std::mutex dlQueueMutex; std::weak_ptr weak_cluster; std::vector worker_thread; bool terminate; }; } #endif