[解決済み] クラスからのpthread関数
2023-03-16 01:42:19
質問
例えば、次のようなクラスがあるとします。
class c {
// ...
void *print(void *){ cout << "Hello"; }
}
そして、ベクトルであるc
vector<c> classes; pthread_t t1;
classes.push_back(c());
classes.push_back(c());
では、スレッドを
c.print();
で、以下のような問題が発生しています。
pthread_create(&t1, NULL, &c[0].print, NULL);
エラー Ouput: 'void* (tree_item:.) を変換できません。 )(void )' を 'void* ( )(void )' を 'int pthread_create(pthread_t*, const pthread_attr_t*, void* ( )(void ), void*)' に変更しました。
どのように解決するのですか?
C++のクラスメンバ関数には、隠し文字である
this
パラメータが渡されるからです。
pthread_create()
がどのような値であるかは分からない。
this
を使用することができないので、適切な型の関数ポインタにメソッドをキャストすることによってコンパイラを回避しようとすると、segmetnation faultが発生します。 静的なクラスメソッド(これには
this
パラメータを持たない)、またはクラスをブートストラップするための普通の関数を使用しなければなりません。
class C
{
public:
void *hello(void)
{
std::cout << "Hello, world!" << std::endl;
return 0;
}
static void *hello_helper(void *context)
{
return ((C *)context)->hello();
}
};
...
C c;
pthread_t t;
pthread_create(&t, NULL, &C::hello_helper, &c);
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 派生クラス関数から親クラス関数を呼び出すには?
最新
-
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++でユーザー入力を待つ【重複あり
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件