'pthread_create (thread, attr, start_routine, arg)'
我可以调用非静态函数创建具有多个参数的线程,因为pthread_create()只接受一个参数且属于void类型。
我在我的类中使用线程,它有许多执行繁重任务的函数,所以我想在自己的线程上执行每个函数但我不能这样做,因为Pthrad_create只接受一个参数而且函数类型静态,所以我该如何解决这个问题。
感谢。
答案 0 :(得分:3)
要完成有关pthread的其他答案:
由于您标记了C ++ 11,请完全避免使用pthread,并使用std::thread
:
std::thread t(func1,a,b,c,d);
它便携,易于维护。
修改强>
如您所知,您可以找到std::thread
文档here。
此SO post discussed也传递了多个参数:
#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);
}
答案 1 :(得分:2)
是的,你可以。例如,您可以将指针传递给包含许多参数的struct。
请参阅:Multiple arguments to function called by pthread_create()?(和第一个答案)。
答案 2 :(得分:2)
您可以将所有这些参数放入结构中,并将指向该结构的指针传递给存根函数。然后,存根函数调用实际函数。
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);
}
答案 3 :(得分:2)
使用结构传递多个参数。在这里,您可以传递任何数据,包括类对象指针。在静态线程proc中,您可以进行类型转换以再次获取Class对象指针,在这里您可以根据需要自由使用类对象指针。
答案 4 :(得分:1)
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;
}