掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
クラスメンバ関数をCreateThreadで実行させるには? (ID:71295)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
↓ friendせんでもこれならおっけぃ。 #include <iostream> #include <windows.h> struct FactorialArgs; class Factorial { private: int result_; // スレッド本体 void execute(int n) { int f = 1; for ( int i = 1; i < n; ++i ) { f *= i; } result_ = f; } public: FactorialArgs* make_args(int n); static void run(void* v); int result() const { return result_; } }; // スレッドに引き渡す引数 struct FactorialArgs { int n; Factorial* instance; }; // ↑を作る FactorialArgs* Factorial::make_args(int n) { FactorialArgs* result = new FactorialArgs(); result->n = n; result->instance = this; return result; } // スレッド・エントリ // こっから private な Factorial::execute を呼ぶ void Factorial::run(void* v) { FactorialArgs& args = *static_cast<FactorialArgs*>(v); args.instance->execute(args.n); } int main() { Factorial fact0; Factorial fact1; FactorialArgs* args0 = fact0.make_args(5); FactorialArgs* args1 = fact1.make_args(7); HANDLE handle[] = { CreateThread(NULL, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(&Factorial::run), args0, 0, NULL), CreateThread(NULL, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(&Factorial::run), args1, 0, NULL), }; WaitForMultipleObjects(2, handle, TRUE, INFINITE); std::cout << "5! = " << fact0.result() << std::endl; std::cout << "7! = " << fact1.result() << std::endl; delete args0; delete args1; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.