现在的位置: 首页 > 综合 > 正文

单件 singleton 唯一的对象实例

2019年01月09日 ⁄ 综合 ⁄ 共 910字 ⁄ 字号 评论关闭
// example13.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"
#include "windows.h"


/*
  我们的应用程序往往有许多配置项,而应用的配置项往往在每个类中都要用到,
  所以把配置数量规整到一个类中来吧。然后用单例模式来实现。
*/


class config
{	
private: 
	config()
	{
	};
	config(const config& con)
	{
	};
	config& operator= (const config& con)
	{
	};
public:
	~config(){};
public:
	static config* getInstance();
//*******************************************************************
}; 




//如果应用是单线程的就可以了,但是如果是多线程,不行需要加锁来保护对
//getInstance 函数的调用。是线程之间互斥访问getInstance。保障该函数作为一个
//原语操作。
config* config::getInstance()
{
	static config instance; //局部静态变量太好了,不用考虑回收,并且在程序运行前就已经在堆区分配好内存了,
	Sleep(100);
	return &instance;
}


DWORD WINAPI WorkerThread(LPVOID)
{
	for(int i=0; i<5; i++)
	{
		printf("threadid=%d pc=%08X\n", GetCurrentThreadId(), config::getInstance());
	}
	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{

	//测试一下吧,看是否只会产生一个实例
	
	DWORD dwThreadId = 0;
	for(int i=0; i<5; i++)
	{
		CreateThread(NULL, 0, WorkerThread, NULL, 0, &dwThreadId);
	}

	getchar();

	return 0;
}

抱歉!评论已关闭.