2

フォーラムを検索した後、c ++の新しいスレッドで静的メソッドを実行する方法について明確な答えを得ることができなかったにもかかわらず、いくつかの答えに出くわしました。私の主な関心事は、スレッドを開始する最良の方法は何ですか?(別のスレッドの内部からも機能しますか?)どのヘッダーを使用するのが良いですか? スレッド.h、pthread.h?

(特定のメソッドが呼び出されたときに) 新しいスレッドを作成し、このスレッド内で別の関数を呼び出したいと思います...この問題にどのようにアプローチできるかについてのヒントはありますか?

どうもありがとうございました!

4

3 に答える 3

7

静的メンバー関数をスレッドで実行しても問題ありません。std::threadfree 関数と同じように使用します。

#include <thread>

class Threaded
{
public:

   static void thread_func() {}

};

int main()
{
    std::thread t(Threaded::thread_func);
    t.join();
    return 0;
}

もちろん、開始スレッドは他のスレッドからも機能します。C++11 標準準拠のコンパイラでは、 を使用する必要があります#include <thread>。それ以外の場合は、 をご覧くださいboost::thread。使い方は似ています。

于 2012-10-02T11:11:06.923 に答える
2

たとえば、静的関数に 2 つのパラメーターがあるとします。

#include <boost/thread/thread.hpp>

void launchThread()
{
    boost::thread t( &MyClass::MyStaticFunction, arg1, arg2 );
}

これには、 Boost.Threadライブラリへのリンクが必要です。

于 2012-10-02T11:11:53.770 に答える
1

これを行う最善の OOP の方法は次のとおりです。メンバー関数( )を呼び出すエントリ ポイント( ) を定義します。エントリ ポイントはスレッドを開始し、 を呼び出します。その後、すべてのメンバー変数とメソッドにアクセスできます。entryPoint()myThreadproc()myThreadproc

myClassA.h

class A
{
   static void *entryPoint(void *arg);
   void myThreadproc();
   void myfoo1();
   void myfoo2();
}

myClassA.cpp

void *A::entryPoint(void *arg)
{
   A *thisClass = (A *)arg;
   thisClass-> myThreadproc();
}

void A::myThreadproc()
{
       //Now this function is running in the thread..
       myfoo1();
       myfoo2();
}

これで、次のようにスレッドを作成できます。

int main()
{
   pthread_t thread_id; 
   pthread_create(&thread_id,NULL,(A::entryPoint),new A());
   //Wait for the thread
   return 0;
}
于 2012-10-02T11:11:26.530 に答える