「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > スレッドからC ++クラスのメンバー関数を安全に呼び出すにはどうすればよいですか?

スレッドからC ++クラスのメンバー関数を安全に呼び出すにはどうすればよいですか?

2025-03-04に投稿されました
ブラウズ:240

How Can I Safely Call C   Class Member Functions from Threads?

クラスのメンバー関数を安全に呼び出す

マルチスレッドの領域では、スレッドの実行内でクラスのメンバー関数を呼び出す必要性に遭遇することが一般的です。ただし、このタスクは、cクラスメンバー関数の非表示の「この」パラメーターのために課題を提示できます。たとえば、次のように考えてみてください。 void *print(void *){cout

今、cインスタンスのベクトルを作成しましょう:

class C {
    void *print(void *) { cout  c.print()を実行するスレッドを作成するには、直感的に:

pthread_create(&t1、null、&c [0] .print、null); (tree_item ::*)(void*) ’to' void*(*)(void*) '
class C {
    void *print(void *) { cout  pthread_create()は特定のタイプの関数ポインターを期待しているため、問題は発生します。 pointer 

このハードルを克服するには、2つのオプションがあります。ハロー関数の静的クラスメソッドを実装する方法は次のとおりです。 公共: static void *hello(void *){std :: cout class C { void *print(void *) { cout 次に、静的クラス方法を使用してスレッドを作成できます:

pthread_create(&t、null、&c :: hello、null);この関数ポインターを使用して、スレッドを作成できます。
class C {
    void *print(void *) { cout  C c;
pthread_create(&t、null、&c :: hello_helper、&c); 

ここで、hello_helperは次のように定義されています。 }

静的クラスメソッドまたは関数ポインターを使用することにより、「この」パラメーター問題を回避して、スレッド内のクラスのメンバー関数を安全に呼び出すことができます。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3