• 2202阅读
  • 9回复

[提问]Qt/C++中如何使用全局变量 [复制链接]

上一主题 下一主题
离线tanyue.esec
 

只看楼主 倒序阅读 楼主  发表于: 2020-08-05
有两个主线程在进行业务操作,都会更新操作的状态;
还有一个定时器,在定时查询状态值,以判断是否操作成功以及是否超时。
在Java中,这种场景使用static静态类的静态变量就可以了,但是Qt里,使用static或者extern好像都不行,两个线程获取到的值似乎是独立的。
如何才能实现多个线程之间共享静态变量值的情况呢。
离线liulin188

只看该作者 1楼 发表于: 2020-08-05
static或者extern好像都不行,两个线程获取到的值似乎是独立的???

楼主,你是在开国际玩笑吗???你是在挑战c++,这已经和qt没关系了
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线tanyue.esec

只看该作者 2楼 发表于: 2020-08-05
所以才尴尬呀

习惯了Java的static,C++已经荒废十几年了,static extern这些概念都忘光了
离线圣域天子

只看该作者 3楼 发表于: 2020-08-05
去掉 static
c语言中在多个 .c 中定义的静态变量就是独立的
C基础没学好啊
离线levon

只看该作者 4楼 发表于: 2020-08-06
这确实是c++的事;和qt没关系;

一个线程参数声明中加上extern;
另外一个线程include 之后即可共享访问;
不需要加上static 修饰;



离线tanyue.esec

只看该作者 5楼 发表于: 2020-08-06
我在一个cpp文件中,定义了一个   int  MATCH_LOCK

在另外两个类的.h文件中,声明了  extern  int  MATCH_LOCK

在这两个类的.cpp文件中,使用了MATCH_LOCK,
其中一个对这个变量进行了操作,cout输出的内容看确实是改过来了,从1变成了0,
但是在另一个线程(继承自QThread)的run函数中,每隔100ms输出一遍MATCH_LOCK,始终都是1,没有改变过,这点让我很诧异。
离线clickto

只看该作者 6楼 发表于: 2020-08-06
怎么修改的?当参数传进函数去修改?
离线tanyue.esec

只看该作者 7楼 发表于: 2020-08-08
回 clickto 的帖子
clickto:怎么修改的?当参数传进函数去修改? (2020-08-06 20:05) 

直接赋值修改
离线fsu0413

只看该作者 8楼 发表于: 2020-08-08
回 tanyue.esec 的帖子
tanyue.esec:我在一个cpp文件中,定义了一个   int  MATCH_LOCK
在另外两个类的.h文件中,声明了  extern  int  MATCH_LOCK
在这两个类的.cpp文件中,使用了MATCH_LOCK,
....... (2020-08-06 11:18) 

被编译器优化掉了,这种情况下加volatile
1条评分金钱+10
tanyue.esec 金钱 +10 感觉很有道理的样子,回头试试。 2020-08-10
离线tanyue.esec

只看该作者 9楼 发表于: 2020-08-10
回 fsu0413 的帖子
fsu0413:被编译器优化掉了,这种情况下加volatile (2020-08-08 19:43) 

感觉很有道理,回头试试。
我已经改成用信号传递对象的指针的方式了,暂时绕过去了这个问题。
快速回复
限100 字节
 
上一个 下一个