所以我试图通过使用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);
对于其他变量
也一样提前感谢任何建议。
答案 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;