??????????????????????????????????????????????ɡ?
/**********??ConsumerThread?????????************/
#include "consumerthread.h"
#include "res.h"
#include <QDebug>
ConsumerThread::ConsumerThread(QObject* parent)
: QThread(parent) {
}
ConsumerThread::ConsumerThread() {
}
ConsumerThread::~ConsumerThread() {
}
void ConsumerThread::run() {
for (int i = 0; i < g_nDataSize; i++) {
g_qsemUsedBytes.acquire();
qDebug()<<"Consumer "<<g_szBuffer[i % g_nBufferSize];
g_szBuffer[i % g_nBufferSize] = ' ';
g_qsemFreeBytes.release();
}
qDebug()<<"&&Consumer Over";
}
/**************************/
???????????????????????????????????????????????????壬???????extern char g_szBuffer[g_nBufferSize]; ????????????????е?#include "res.h"????extern char g_szBuffer[];??
???????????????????????????????#include "res.h"???????????????μ??????????????????????????res.h?м?#pragma once????#ifndef????????????壬????????????????????????????????ж??壩?????res.h??????????????????????????????????????????extern???Σ???????鷳???????????????.h????????.cpp?ж??????????
??????5???????????(static)
??????????static???α????????????extern?????Σ???static??extern???????????
????static???ε??????????????????????У??????????????????static????????????????????????????
????static???ε????????????????????????????????????????????????????????????????????????????????????????????????汣??????????????????????????????????????????????????????????A??????????????????????????????????B????????????????????????????A??B???????????????????????????
?????????????t???????????????????????????????????????????????????????????????????д洢??
??????????Windows???????ó???????????
/***********res.h**********/
static char g_szBuffer[6] = "12345";
void fun();
/************************/
/***********res.cpp**********/
#include "res.h"
#include <iostream>
using namespace std;
void fun() {
for (int i = 0; i < 6; i++) {
g_szBuffer[i] = 'A' + i;
}
cout<<g_szBuffer<<endl;
}
/************************/
/***********test1.h**********/
void fun1();
/************************/
/***********test1.cpp**********/
#include "test1.h"
#include "res.h"
#include <iostream>
using namespace std;
void fun1() {
fun();
for (int i = 0; i < 6; i++) {
g_szBuffer[i] = 'a' + i;
}
cout<<g_szBuffer<<endl;
}
/************************/
/***********test2.h**********/
void fun2();
/************************/
/***********test2.cpp**********/
#include "test2.h"
#include "res.h"
#include <iostream>
using namespace std;
void fun2() {
cout<<g_szBuffer<<endl;
}
/************************/
/***********main.cpp**********/
#include "test1.h"
#include "test2.h"
int main() {
fun1();
fun2();
system("PAUSE");
return 0;
}
/************************/
???????н?????£?

????????????????????fun1()??fun2()??????????abcdef?????????fun2()?????????????????????????????????res??test1??test2??g_szBuffer?????????????????0x0041a020??0x0041a084??0x0041a040???????????????????
????????????static ???????????????????.cpp????ж?????.h????У????????????????????????????????????
??????6????????(const)
????const??????????????????static??????????????е????????????????????????????????????????ж????????
????const??extern?????????????????extern?????
????extern const char g_szBuffer[];      //д?? .h??
????const char g_szBuffer[] = "123456"; // д??.cpp??