C中的全局结构和多线程
有人可以解释一下这段代码中的编译错误吗:
#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;
是
错误:非静态成员引用必须相对于特定对象
我在这里缺少什么?
谢谢 !
can someone explain me the compilation error in this code:
#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
}
I want the nodeData struct to be available to every listenerThread I will create. threads are going to manipulate this nodeData struct all the time (will protect it with a mutex).
so i want this struct to be availabe globally. where do i initialize it ? my guess is in main.
the compilation error in the line
nodeData.localport = 5001;
is
error: a nonstatic member reference must be relative to a specific object
what am i'm missing here ?
thanks !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
nodeData
是一种类型而不是变量 - 因为您typedef
它。尝试例如:然后使用变量
MyNodeData
nodeData
is a type not a variable - since youtypedef
it. Try e.g:And then use the variable
MyNodeData
如果不考虑为什么不应该为此使用全局变量,那么您就没有在任何地方创建全局变量,只是定义了一个结构并对其进行了 typedef。
在 main 之前,您需要执行以下操作:
并将其作为
myNodeData
访问Without going into why you shouldn't use a global for this, you haven't created a global variable anywhere, only defined a structure and typedef'd it.
Prior to main you would need to do:
And access it as
myNodeData