变量作为全局范围内的结构 - 如何定义?

时间:2017-01-30 12:30:54

标签: c++ multithreading struct

首先,我还在学习C ++,因为我需要修改一个程序来添加一些功能。在这个程序中,我有一个全局状态变量,它是一个结构。这是想法/代码:

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

这是在' .h'中定义的。主程序和这个'变量' (MyStruct)在很多函数中被调用以获取状态和其他信息。 问题是我需要将这些信息发送给一个线程。我试图创建一个线程(使用pthread_create)并传递这个'变量'作为指向pthread_create函数的指针。这工作很好。问题是当我尝试在我的线程函数中访问此结构的任何属性时。我可以将我的局部变量强制转换为此结构,因为此结构没有定义名称!是否可以访问没有结构名称的属性?我真的试图避免更改这个结构(甚至为它添加一个名称)。

我的pthread创建(工作正常):

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...
}

1 个答案:

答案 0 :(得分: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