在直接问你我的问题之前,我将描述我的问题的性质。我正在使用 C++/OpenGL 和 GLFW 库编写 2D 模拟。而且我需要正确管理很多线程。在 GLFW 中我们必须调用函数:thread = glfwCreateThread(ThreadFunc, NULL); (第一个参数是执行线程的函数,第二个代表这个函数的参数)。而且glfwCreateThread,每次都必须调用!(即:在每个周期中)。这种工作方式并没有真正帮助我,因为它破坏了我构建代码的方式,因为我需要在主循环范围之外创建线程。所以我正在创建一个 ThreadManager 类,它将具有以下原型:
class ThreadManager {
public:
ThreadManager();
void AddThread(void*, void GLFWCALL (*pt2Func)(void*));
void DeleteThread(void GLFWCALL (*pt2Func)(void*));
void ExecuteAllThreads();
private:
vector<void GLFWCALL (*pt2Func)(void*)> list_functions;
// some attributs
};
例如,如果我想添加一个特定线程,我只需要使用特定参数和特定函数调用 AddThread。目标只是能够调用: ExecuteAllThreads(); 在主循环范围内。但为此我需要有类似的东西:
void ExecuteAllThreads() {
vector<void GLFWCALL (*pt2Func)(void*)>::const_iterator iter_end = list_functions.end();
for(vector<void GLFWCALL (*pt2Func)(void*)>::const_iterator iter = list_functions.begin();
iter != iter_end; ++iter) {
thread = glfwCreateThread(&(iter*), param);
}
}
在 AddThread 中,我只需要将 pt2Func 引用的函数添加到向量:list_functions。
好吧,这是我想做的事情的总体思路..这是正确的方法吗?你有更好的主意吗?如何做到这一点,真的吗?(我的意思是问题在于语法,我不知道该怎么做)。
谢谢 !