mirror of
				https://github.com/kunkundi/crossdesk.git
				synced 2025-10-26 20:25:34 +08:00 
			
		
		
		
	[fix] clear task queue before IceTransportController released
This commit is contained in:
		| @@ -54,12 +54,27 @@ class TaskQueue { | |||||||
|         std::chrono::steady_clock::now() + std::chrono::milliseconds(delay_ms); |         std::chrono::steady_clock::now() + std::chrono::milliseconds(delay_ms); | ||||||
|     { |     { | ||||||
|       std::unique_lock<std::mutex> lock(mutex_); |       std::unique_lock<std::mutex> lock(mutex_); | ||||||
|       taskQueue_.emplace(execute_time, |       taskQueue_.emplace(execute_time, std::move(task)); | ||||||
|                          std::move(task));  // 确保参数匹配 TaskItem 构造 |  | ||||||
|     } |     } | ||||||
|     cond_var_.notify_one(); |     cond_var_.notify_one(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   void ClearTasks() { | ||||||
|  |     { | ||||||
|  |       std::unique_lock<std::mutex> lock(mutex_); | ||||||
|  |       stop_ = true; | ||||||
|  |       while (!taskQueue_.empty()) { | ||||||
|  |         taskQueue_.pop(); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     cond_var_.notify_all(); | ||||||
|  |     for (std::thread &worker : workers_) { | ||||||
|  |       if (worker.joinable()) { | ||||||
|  |         worker.join(); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  private: |  private: | ||||||
|   struct TaskItem { |   struct TaskItem { | ||||||
|     std::chrono::steady_clock::time_point execute_time; |     std::chrono::steady_clock::time_point execute_time; | ||||||
|   | |||||||
| @@ -26,6 +26,13 @@ IceTransportController::IceTransportController( | |||||||
| } | } | ||||||
|  |  | ||||||
| IceTransportController::~IceTransportController() { | IceTransportController::~IceTransportController() { | ||||||
|  |   if (task_queue_cc_) { | ||||||
|  |     task_queue_cc_->ClearTasks(); | ||||||
|  |   } | ||||||
|  |   if (task_queue_encode_) { | ||||||
|  |     task_queue_encode_->ClearTasks(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   user_data_ = nullptr; |   user_data_ = nullptr; | ||||||
|   video_codec_inited_ = false; |   video_codec_inited_ = false; | ||||||
|   audio_codec_inited_ = false; |   audio_codec_inited_ = false; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user