vc线程如何访问全局变量,vc++ 多线程
C++的类成员函数如何访问全局变量?
全局变量一般这样定义:
1、在*.cpp中定义 int myInt;
然后再在要用到的地方的.cpp里extern int myInt;
2、在stdafx.cpp中加入:
int myInt;
然后在stdafx.h中加入:
extern int myInt
这样定义以后无论在什么文件中都是可见的.
3、比较规范的是,先定义一个Glbs.h,把所有的全局变量原始定义放进去。然后定义一个Externs.h,把你先前定义在Glbs.h中的变量都加上extern。注意:如果你在Glbs.h中设置了初值,那么在Externs.h中就不要加值了。然后调用时,第一次调用的#i nclude Glbs.h,以后调用的#i nclude Externs.h
附:
问:如何在VC++中使用全局变量,以使文档中的所有类都能访问。
答:把该变量放到该应用程序类的头文件中的attribute处。然后,在程序的任何地方,你都可以用下面的方法来访问该变量:
CMyApp *app=(CMyApp*)AfxGet-App();
app-MyGlobalVariable=…
用这个方法,不但可以定义全局变量,也可以定义全局对象。
例如:
MyClass MyObject;
CMyApp*app=(CMyApp*)AfxGet-App();
app-MyObject.MyFunction();
VC中使用全局变量的2种办法及防错措施
1. 对于全局变量存在和函数一样的问题,为了在其他CPP文件中能够访问这些变量,必须在主文件的H文件中加上extern声明,格式如下:
extern varibletype var; (声明)
在主文件的CPP文件中定义
varibletype var; (定义)
例子:
AppWizard建立一个Test工程
那么在Test.h中声明extern CString cs;
在Test.app定义CString cs;
如果要定义整个工程的全局变量,在任何一个CPP文件中进行定义,然后在需要引用这个变量的文件中进行声明。如全局变量很多可以选择使用定义全局变量的.h文件,在需要的地方直接include头文件即可,不需要写那么多extern了。
2.应用程序类的主头文件处定义变量varibletype var,然后,在程序的任何地方,都可以用下面的方法来访问该变量:
CClassApp *app=(CClassApp*)AfxGetApp();
app-var=
类似的,以上方法也可以定义全局对象
例子:
AppWizard建立一个Test工程
那么在Test.h中声明 CString cs;
使用的时候CTestApp *app=(CTestApp*)AfxGetApp();
app-cs="Global"
C++中全局变量怎么定义使用
1、全局变量的定义和普通变量的定义相同,只是在别的cpp文件中使用前需要用extern修饰符声明。
2、extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
VC多线程访问同一全局变量的问题
WaitForSingleObject(pFrameInQueue-m_mutex,INFINITE);
ReleaseMutex(pFrameInQueue-m_mutex); 需要成对的出现.你在if判断里边释放一次
但是如果if条件不成立,你就没有调用释放.这样的结果就是互斥量mutex被锁定,
其他线程无法调用.
在2个if判断外加上释放mutex的语句再试一试
如何在VC多线程下使用私有的全局变量
貌似没有很好的办法。只有为函数增加一个参数(指针或引用,一个变量的话可以引用,多个就只能用指针了),在线程中定义变量并将变量传入。
vc++中如何设全局变量
把全局变量放到一个头文件中,在用到这个全局变量的时候包含这个头文件。这样的代码容易围护。但软件开发过程中最好不要用全局变量。
你程序错误的原因:
它是在链接的时候出现的错误,当你编译的时候,编译器找到num这个符号,发现你做了extern int num;省名,所以编译没有问题,但链接的时候编译器会去找这个变量的定义,如果没有找到就会出现上面的错误.
mfc线程得不到全局变量
线程中是可以使用全局变量的,这个没有问题。但是你对界面的操作,不可以使用该方法。可以通过对界面在线程中发送消息的方式来实现。