C ++:将struct传递给PThread

时间:2014-12-15 16:40:45

标签: c++ struct pthreads

所以我试图通过使用struct将几个值传递给一个线程。

这就是我所拥有的:

int main()
{

struct Data
{
int test_data;
int test_again;
};

Data data_struct;
data_struct.test_data = 0;
data_struct.test_again = 1;

pthread_create(&thread, NULL, Process_Data, (void *)&data_struct);
return 0;
}


void* Process_Data(void *data_struct)
{
 struct test
{
    int test_variable;
    int test_two;
};
test testing;
testing.test_variable = *((int *)data_struct.test_data);
testing.test_two = *((int *)data_struct.test_again);
}

我遗漏了任何代码(包括#include和thrad连接等)我觉得这个问题不需要为了简单起见,但是如果需要更多代码请问。

当传递一个整数变量时,线程工作正常。

这是我得到的错误:

在函数'void * Process_Data(void *)中:错误:请求'data_struct'中的成员'test_variable',它是非类类型'void *'testing.test_variable = *((int *)data_test。 test_variable);

对于其他变量

也一样

提前感谢任何建议。

2 个答案:

答案 0 :(得分:4)

通常的方法是

void* Process_Data(void *data_struct)
{
  Data *testing = static_cast<Data*>(data_struct);

  // testing->test_data and testing->test_again are
  // data_struct.test_data and data_struct.test_again from main
}

您得到的错误是因为您尝试从void指针中选择成员,而该指针没有任何指针。为了使用你知道void指针指向的结构,你必须将它强制转换为指向该结构的指针。

另外,请注意,您应该pthread_join您刚刚开始的主题,或者主要会在它可以执行任何操作之前结束。

答案 1 :(得分:1)

你有无类型的void *指针,你试图从中提取数据

首先尝试将指针转换为某些东西,然后使用它

Data* p = (Data*)data_struct;

int a = p->test_data;
int b = p->test_again;