全局结构和c中的多个线程

时间:2011-04-17 17:48:07

标签: c windows struct global

有人可以解释一下这段代码中的编译错误:

#include "common.h"

typedef struct nodeData {
    int procid;
    unsigned short localport;
    DWORD LIFETIME;
    DWORD HELLOTIMEOUT;
    DWORD MAXTIME;
} nodeData;

int listenerThread() {
    if(!bindSocket(listenSocket,nodeData.localport)){
        closesocket(listenSocket);
        WSACleanup();
        exit(-1);
}
    // more code goes here  
}

int main(int argc,char* argv[]) {
    nodeData.localport = 5001;
    // more code goes here  

}

我希望nodeData结构可用于我将创建的每个listenerThread。线程将一直操纵这个nodeData结构(用互斥锁保护它)。

所以我希望这个结构可以全局使用。我在哪里初始化它?我猜是主要的。

中的编译错误
nodeData.localport = 5001;

  

错误:非静态成员引用必须相对于特定对象

我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:6)

nodeData类型不是变量 - 因为您typedef。试试,例如:

typedef struct nodeData_t {
    int procid;
    unsigned short localport;
    DWORD LIFETIME;
    DWORD HELLOTIMEOUT;
    DWORD MAXTIME;
} nodeData;

nodeData MyNodeData;

然后使用变量 MyNodeData

答案 1 :(得分:1)

为什么你不应该为此使用全局变量,你没有在任何地方创建一个全局变量,只定义了一个结构并为它定义了它。

在主要之前你需要做:

nodeData myNodeData;

并将其作为myNodeData

进行访问