建议将全局变量创建在.h/.cpp文件中,其中.h文件声明变量,.cpp文件中定义变量值。
在.h文件中定义变量,则工程多次#include该文件会出现“该文件已经被使用”。
具体示例如下:
synchronize_data.h
//
// Created by qiaowei on 2023-10-28.
//
#ifndef CPPGUIPROGRAMMINGWITHQT4INCLION_SYNCHRONIZE_DATA_H
#define CPPGUIPROGRAMMINGWITHQT4INCLION_SYNCHRONIZE_DATA_H
#include <QChar>
#include <QSemaphore>
/**
* @date 2023-10-28
* @author qiao wei
* @brief 要传输的总数据数量。
*/
extern const int kDataSize;
/**
* @date 2023-10-28
* @author qiao wei
* @brief 数据池容量。
*/
extern const int kBufferSize;
/**
* @date 2023-10-28
* @author qiao wei
* @brief 数据池。初始阶段,数据池未存放任何数据
*/
extern QChar buffer[];
/**
* @date 2023-10-30
* @author qiao wei
* @brief 自由信号标。在初始阶段有kBufferSize个自由信号标可用。数据池每放入1个数据,自由信号标就减1个。
*/
extern QSemaphore free_semaphore;
/**
* @date 2023-10-30
* @author qiao wei
* @brief 可用信号标。在初始阶段没有数据可用,所以可用信号标数量为0。当数据池放入1个还未用的数据时,可用信号标就增加1个。
*/
extern QSemaphore used_semaphore;
#endif //CPPGUIPROGRAMMINGWITHQT4INCLION_SYNCHRONIZE_DATA_H
synchronize_data.cpp
//
// Created by qiaowei on 2023-11-01.
//
#include "synchronize_data.h"
const int kDataSize{1000};
const int kBufferSize{4};
QChar buffer[kBufferSize];
QSemaphore free_semaphore{kBufferSize};
QSemaphore used_semaphore{0};