いくつかのデータメンバーを持つクラスと、これらのデータメンバーにアクセスできるプライベートクラスを定義できます。クラス内のスレッドを同じクラスの関数で作成する
次に、クラスのデータメンバーで動作するスレッドを作成するpublic関数が必要です。私はコードをコンパイルするのにいくつか問題があります。
mutexやデータ保護について心配する必要はありませんが、これは問題になることはありません。これはテスト用のコード例です。
class foo {
public:
void make_foo_func_threads();
private:
void foo_func();
char private_data;
std::vector<std::thread> some_threads;
}
void foo::foo_func() {
while(1) {
private_data = 'A';
}
}
void foo::make_foo_func_thread() {
for(...) some_threads.push_back(std::thread(foo_func));
for(...) some_threads.join();
}
コンパイラは私にエラーを与えている:
'no matching call to std::thread::thread()'
どうやら<unresolved overloaded function type>
からvoid (foo::*&&)'
への引数1「は既知の変換はありません。
コンパイラとは別に、foo_funcを解決する方法を理解することができないと私は考えていません。
私は何をしようとしているのかをコンパイラに理解させるために、どうすればエラーが出るのか気にしません。間違いなく、私が書いたコードは合法ではなく、そうであれば誰かがなぜそれが私の場合であるか説明することができます。ありがとう!
さて、それは素晴らしいことです!しかし、1つの問題は、私のプログラムが無限ループが走っているはずですが、メインの一番下から抜け出してしまいます。 thread.join()はスレッドが参加するのを待っているようではありません! – user3728501
@EdwardBird、あなたは積み重ねられた曲がりくねったものに完全なプログラムを投稿してリンクを投稿できますか?あるいは、他の人の貢献を得るための別の質問を掲示してください(そして、この回答と、もう1つは投稿された質問に答えました)。 – hmjd
おっと、私の気持ちは変わりませんでした。私はf.make_foo_func_threads()を入れませんでした。メイン!それについて申し訳ありません、それは誰もがうまくいきません! >。< – user3728501