2017-01-30 69 views
1

首先,我还在学习C++,因为我需要修改一个程序来添加一些功能。在这个程序中,我有一个全局状态变量,它是一个结构体。这是想法/代码:作为全球范围内的结构变量 - 如何定义?

struct { 
    int counter; 
    int x; 
    int y; 
} MyStruct; 

这在主程序的“.H”和这个‘变量’(MYSTRUCT)定义被称为了很多函数来获取状态和其它信息。 问题是我需要将这些信息发送给一个线程。我正在尝试创建一个线程(使用pthread_create)并将此“变量”作为指向pthread_create函数的指针传递。这工作很好。问题是当我尝试在我的线程函数中访问此结构的任何属性时。我不能为我的局部变量绑定这个结构体,因为这个结构体没有定义名称!有可能访问没有结构名称的属性?我真的试图避免改变这个结构(甚至为它添加一个名称)。

我的并行线程创建(正常工作):

pthread_create(&proc_local_table_thread, NULL, procLocal, &MyStruct); 

而我的线程函数(不工作):

void *procLocal(void *arg) { 
    int *a = arg.x; 
    // This doesn't work too 
    //int *a = (struct Modes)arg.x; 
    // Code... 
} 
+4

C或C++?它们不一样,特别是在处理“空白”指针时。 –

+4

[不起作用](http://importblogkit.com/2015/07/does-not-work/)不是一个好问题描述。 –

+1

不要发送垃圾邮件标签! – Olaf

回答

0

您可以使用decltype(C++以上11)

void *procLocal(void *arg) { 
    auto pMyStruct = static_cast<decltype(MyStruct)*>(arg); 

    int *a = &(pMyStruct->x); 
} 

在C++ 11之前,我想你没有别的选择来使用mch所说的(即http://ideone.com/KovP7x

相关问题