[解決済み】メンバ関数でスレッドを開始する
2022-04-30 05:17:16
質問
を構築しようとしています。
std::thread
を返すメンバ関数で、引数を取らずに
void
. どのような構文を使っても、コンパイラは文句を言うのです。を実装する正しい方法は何でしょうか?
spawn()
を返すように
std::thread
を実行する
test()
?
#include <thread>
class blub {
void test() {
}
public:
std::thread spawn() {
return { test };
}
};
解決方法は?
#include <thread>
#include <iostream>
class bar {
public:
void foo() {
std::cout << "hello from member function" << std::endl;
}
};
int main()
{
std::thread t(&bar::foo, bar());
t.join();
}
EDIT 編集したものを会計処理する、このようにしなければなりません。
std::thread spawn() {
return std::thread(&blub::test, this);
}
UPDATEです。 コメント欄でも議論されていることですが、もう少し説明したいと思います。
上記の構文は、INVOKE定義(§20.8.2.1)の観点で定義されています。
INVOKE (f, t1, t2, ..., tN)を次のように定義する。
- (t1.*f)(t2, ..., tN) fがクラスTのメンバ関数へのポインタ、t1がT型のオブジェクト、またはT型のオブジェクトへの参照であるとき 型またはTから派生した型のオブジェクトへの参照。
- ((*t1).*f)(t2, ..., tN) fがクラスTのメンバ関数へのポインタであり,t1が前記の型のいずれかでないとき。 の項目があります。
- t1.*f N == 1でfがクラスTのメンバデータへのポインタであり、t1が型Tのオブジェクトまたは
のオブジェクトへの参照、またはT型のオブジェクトへの参照。
型はTから派生したものである。- (*t1).*f N == 1で、fがクラスTのメンバデータへのポインタであり、t1が前項で述べた型のいずれでもないとき。
- その他の場合はf(t1, t2, ..., tN)。
もう 1 つの一般的な事実として、デフォルトでは、スレッド コンストラクタは渡されたすべての引数をコピーすることを指摘したいと思います。この理由は、引数が呼び出し元のスレッドより長生きする必要がある場合があり、引数をコピーすることでそれが保証されるからです。その代わり、本当に参照を渡したい場合は
std::reference_wrapper
が作成した
std::ref
.
std::thread (foo, std::ref(arg1));
こうすることで、スレッドが引数を操作するときに、引数がまだ存在することを保証するように配慮することを約束することになります。
上記で述べたことはすべて
std::async
と
std::bind
.
関連
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] スレッドを強制終了させる方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】'std::cout'への未定義の参照