gpt4 book ai didi

c++ - pthread_create() 调用的函数的多个参数 - 参数是函数指针

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:58 25 4
gpt4 key购买 nike

我的情况类似于another Question .

我想传递一个函数作为参数和一个整数值。使用简化的结构测试案例:

void print (int x, int y) 
{ cout << "x = " << x << ", y = " << y << endl; }

void *interrupt (struct arg_struct args);

struct arg_struct {
void (*func)(int,int); // Argument 1
int a; // Argument 2
int b; // Argument 3
};

int _tmain(int argc, _TCHAR* argv[]){

int a = 1700, b = 1000;

struct arg_struct arguments;

arguments.func = print;
arguments.a = a;
arguments.b = b;

(*interrupt)(arguments);

cin.get(); return 0;
}


void *interrupt (struct arg_struct args) {

void (*func) (int,int) ;

func = args.func;
int x = args.a;
int y = args.b;

(*func)(x,y);

return 0; // Erfordert Rückgabewert
}

所以现在我想创建一个线程来执行这个传递的函数。

void *InThread_func(struct arg_struct *);   // Prototype                        

struct arg_struct {
void (*func)(int); // Argument 1
int IntNumber; // Argument 2
};

int InThread(void (*func)(int), int IntNumber){

struct arg_struct arguments;

arguments.func = func;
arguments.IntNumber = IntNumber;

// Initialize handler
pthread_t InThread_thread;

// Create thread
pthread_create(&InThread_thread,NULL,&InThread_func,(void*) &arguments);

pthread_join(InThread_func,NULL);

return(errno);
}

使用

g++-4.6 -o test test.cpp

编译器说

invalid conversion from void* (*)(arg_struct*) to void * (*)(void*)

引用pthread_create的最后一个参数。

这是为什么?

最佳答案

C++ 在转换方面很挑剔。

void *InThread_func(struct arg_struct *); 替换为 void *InThread_func(void *my_data); 应该可以解决问题。

因为这是 C++,我建议使用 std::thread 是那些可用的。

关于c++ - pthread_create() 调用的函数的多个参数 - 参数是函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28680347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com