如何在新线程中运行静态函数?

时间:2012-10-02 10:59:34

标签: c++ multithreading

通过论坛搜索后,我遇到了一些答案nevertheles我无法得到如何在c ++的新线程中运行静态方法的明确答案。我主要担心的是启动线程的最佳方法是什么?(它是否也可以从另一个线程内部工作?) 哪个标题更好用? thread.h,pthread.h?

我想创建一个新线程(当调用给定方法时)并在此线程内调用另一个函数... 我有什么提示可以解决这个问题吗?

提前非常感谢你们!

3 个答案:

答案 0 :(得分:7)

在线程中运行静态成员函数没有问题。只需使用std::thread与自由函数相同的方式:

#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。它的用法类似。

答案 1 :(得分:2)

假设您的静态函数有两个参数:

#include <boost/thread/thread.hpp>

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

这需要链接到Boost.Thread库。

答案 2 :(得分: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;
}