#pragma once #include //#include #include using task_callback = void (*)(void* arg); // 此处需要确定arg参数的类型,使用类模板进行设计 template struct Task { task_callback func; T* arg; Task() { func = nullptr; arg = nullptr; } Task(const task_callback& f, void* arg) : func(f), arg((T*)arg) { } }; template class TaskQueue { private: std::queue> m_taskQ; //std::mutex m_mutex; pthread_mutex_t m_mutex; public: TaskQueue(); ~TaskQueue(); // 添加任务 void addTask(Task task); // 添加任务的重载函数 void addTask(task_callback f, void* arg); // 取出一个任务 Task getTask(); // 获取当前任务的个数 inline size_t taskNum() { pthread_mutex_lock(&m_mutex); size_t taskNum = m_taskQ.size(); pthread_mutex_unlock(&m_mutex); return taskNum; } };