在论坛中搜索后,我遇到了一些答案,但我无法得到关于如何在 C++ 中的新线程中运行静态方法的明确答案。我主要关心的是启动线程的最佳方式是什么?(它是否也在另一个线程内部工作?)哪个标头更好用?线程.h,pthread.h?
我想创建一个新线程(当调用给定方法时)并在该线程内调用另一个函数...任何提示我如何解决这个问题?
非常感谢你们!
在论坛中搜索后,我遇到了一些答案,但我无法得到关于如何在 C++ 中的新线程中运行静态方法的明确答案。我主要关心的是启动线程的最佳方式是什么?(它是否也在另一个线程内部工作?)哪个标头更好用?线程.h,pthread.h?
我想创建一个新线程(当调用给定方法时)并在该线程内调用另一个函数...任何提示我如何解决这个问题?
非常感谢你们!
在线程中运行静态成员函数是没有问题的。只需使用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
。它的用法类似。
例如,假设您的静态函数有两个参数:
#include <boost/thread/thread.hpp>
void launchThread()
{
boost::thread t( &MyClass::MyStaticFunction, arg1, arg2 );
}
这将需要链接到Boost.Thread库。
执行此操作的最佳 OOP 方法是:定义一个入口点( entryPoint()
),该入口点将调用成员函数( myThreadproc()
)。入口点将启动线程并调用myThreadproc
. 然后你可以访问所有的成员变量和方法。
我的ClassA.h
class A
{
static void *entryPoint(void *arg);
void myThreadproc();
void myfoo1();
void myfoo2();
}
我的ClassA.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;
}