C++中多线程、多页面、多文件共享变量及具体读写实现(含源码)

C++中多线程、多页面、多文件共享变量及具体读写实现(含源码),第1张

C++中多线程、多页面、多文件共享变量及具体读/写实现(含源码)

在C++开发WIN32窗口程序时,很多时候需要用到全局变量和多线程互相调用全局变量等,比如,一个线程用来利用websocket获取服务器的数据并放到一个缓存池中(尽量减少等待),一个线程用来获取缓存池中的变量值以刷新窗口界面显示,一个线程将缓存池中需要更新的数据,拉取更新到数据库,这样可以保证,互不影响。

实现全局变量其实很简单,就是创建一个被所有页面调用的类(含:头文件.h和类文件.cpp),在此文件中先用extern声明一个变量(但千万不要赋值),然后在类文件.cpp中进行相关赋值初始化等。这样就可以在其他文件中调用了(当然,其他文件中要引用此头文件#include “global.h”)
global.h

extern int test;

global.cpp

#include "global.h"
int test = 0;

说了原理,我们做个实际例子展示下:

1、创建新项目 - Windows桌面向导

2、选择桌面应用程序

3、创建global.h 和 global.cpp

global.h

#pragma once

extern int test;

class global
{
};

global.cpp

#include "global.h"

int test = 0;

4、在头文件的资源文件Resource.h中,增加按钮消息变量

#define IDB_BUTTON_TEST        300

5、在项目主文件Project3.cpp中分别增加以下代码

引入全局变量文件和事先声明一个按钮变量名,并且申明一个线程threadA和A的执行方法,以及在WinMain方法中,激活线程threadA

修改窗口大小

增加按钮点击事件

分别在WndProc方法中,增加按钮点击事件和按钮加载语句

做了以上动作后,我们就简单做了:
1、一个C++ WIN32程序窗口
2、窗口有一个按钮pButtonTest,点击按钮后,d出传递过来的字符串:123456
3、一个独立与窗口的线程threadA,此线程每5秒报下自己的名字:线程A

准备工作就做好了,接下来,我们要实现:线程A每1秒将全局变量+1,我们点击窗口线程中的按钮,可以看到当前全局变量的值的变化。

首先,将线程A的执行方法的d窗改成:test++

然后,将点击按钮执行的事件换成

PS:由于我们使用的是“使用 Unicode 字符集”,所以默认d窗提醒MessageBox里的文字要使用多字节字符串,便于展示我先使用窄字符d窗方法:MessageBoxA。
另外,因为使用了sprintf函数,所以,需要增加头文件

#include 

最终效果如下

源码下载:https://gitee.com/kefong/project-global.git

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存