私の質問を直接する前に、私の問題の性質を説明します。C++/OpenGL と GLFW ライブラリを使用して 2D シミュレーションをコーディングしています。そして、たくさんのスレッドを適切に管理する必要があります。GLFW では、関数を呼び出す必要があります: thread = glfwCreateThread(ThreadFunc, NULL); (最初のパラメーターはスレッドを実行する関数で、2 番目のパラメーターはこの関数のパラメーターを表します)。そして 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 を呼び出すだけです。目標は、次のように呼び出せるようにすることです。メインループスコープ内。しかし、これには次のようなものが必要です:
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。
さて、これは私がやりたいことの一般的な考えです..それは正しい方法ですか?もっと良いアイデアがありますか?どうやってこれを行うのですか?(つまり、問題は構文です。これを行う方法がわかりません)。
ありがとうございました !