在c++中使用线程调用带有多个参数的非静态函数
calling a non static function with multiple arguments using threads in c++
'pthread_create (thread, attr, start_routine, arg)'
我可以调用一个非静态函数来创建有多个参数的线程,因为pthread_create()将只接受一个参数,并且是void类型的。
我在我的类中使用线程,它有许多执行繁重任务的函数,所以我想在自己的线程上执行每个函数,但我不能这样做,因为Pthrad_create只需要一个参数,也是静态类型的函数,所以我怎么能解决这个问题。
谢谢。
关于pthread的其他回答:
由于您标记了c++ 11,因此完全避免使用pthread,并使用std::thread
:
std::thread t(func1,a,b,c,d);
可移植,更容易维护。
编辑:如您所问,您可以在这里找到std::thread
文档。
这篇文章也讨论了传递多个参数:
#include <thread>
void func1(int a, int b, ObjA c, ObjB d){
//...
}
int main(int argc, char* argv[])
{
std::thread t(func1,a,b,c,d);
}
您可以将所有这些参数放入一个结构体中,并将指向该结构体的指针传递给存根函数。存根函数然后调用实函数。
struct foo
{
int param1;
int param2;
// etc.
};
struct foo myFoo;
myFoo.param1 = 1;
myFoo.param2 = 42;
pthread_create(thread, attr, stub_function, &myFoo);
void stub_function(void* params)
{
foo myFoo = (foo*)params;
real_function(myFoo->param1, myFoo->param2);
}
可以。例如,您可以将指针传输到包含多个参数的结构体。
参见:pthread_create()调用的函数有多个参数?(和第一个答案)。
使用结构传递多个参数。在这里,你可以传递任何数据,包括类对象指针。在静态线程过程中,您可以再次进行类型转换以获得类对象指针,在这里您可以根据需要自由使用类对象指针。
class Student
{
public:
Student() { m_Age = 25; }
int m_Age;
};
typedef struct
{
Student *pStudent;
// You can add other data members also.
} DATA;
static void fnStatic(void *pData)
{
DATA *data = (DATA*)pData;
cout << data->pStudent->m_Age << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Student *pStudentPtr = new Student();
DATA *data = new DATA();
data->pStudent = pStudentPtr;
fnStatic(data);
return 0;
}
相关文章:
- 将非静态函数作为参数传递时出错
- 静态函数作为类模板参数-导致可维护性问题
- boost::绑定静态函数的参数
- 授予静态函数对数据的访问权限,而不将数据作为参数传递
- Boost Python def 成员函数,它调用静态函数,其中 self 作为唯一的参数
- C++:std::bind() 如何"知道"模板参数是指静态函数还是成员函数?
- 指向可变参数模板静态函数的指针.如何
- 静态函数中的非静态参数
- 是否可以在模板类中编写一个静态可变参数模板函数,该函数能够接受 T 类型的 N 个参数?
- C++使用预定义参数调用静态函数指针
- 将参数中的静态函数指针替换为实例中方法的指针
- 正在初始化不使用零参数构造函数c++的静态类对象
- 链式静态函数调用之间的参数求值顺序
- 函数可以接受静态函数指针作为参数吗?
- Lambda函数无法调用函数模板参数的静态函数
- 如何引用一个静态函数作为参数传递
- 在c++中使用线程调用带有多个参数的非静态函数
- 如何在C++中从静态函数内部将指向静态函数的指针作为参数传递给另一个静态函数
- 如何强制派生类实现一个静态函数,该函数接收派生类的对象作为参数
- c++静态编译带有可变数量或参数的函数