⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytls.cpp

📁 《windows程序设计》王艳平版的书籍源代码
💻 CPP
字号:
///////////////////////////////////////////////////////////////
// MyTls.cpp文件

#include "../common/_afxtls_.h"
#include <process.h>

#include <iostream>
using namespace std;

struct CMyThreadData : public CNoTrackObject
{
	int nSomeData;
};

// 下面的代码展开后相当于“CThreadLocal<CMyThreadData> g_myThreadData;”
THREAD_LOCAL(CMyThreadData, g_myThreadData)

void ShowData();
UINT __stdcall ThreadFunc(LPVOID lpParam)
{
	g_myThreadData->nSomeData = (int)lpParam;
	ShowData();
	return 0;
}

void main()
{
	HANDLE h[10];
	UINT uID;

	// 启动十个线程,将i做为线程函数的参数传过去
	for(int i=0; i<10; i++)
		h[i] = (HANDLE) ::_beginthreadex(NULL, 0, ThreadFunc, (void*)i, 0, &uID);
	::WaitForMultipleObjects(10, h, TRUE, INFINITE);
	for(i=0; i<10; i++)
		::CloseHandle(h[i]);
}

void ShowData()
{
	int nData = g_myThreadData->nSomeData;
	printf(" Thread ID: %-5d, nSomeData = %d \n", ::GetCurrentThreadId(), nData);
}



/*
2.3.1中的代码:


struct MyThreadData
{
	MyThreadData* pNext;
	int nSomeData;
};

void main()
{
	MyThreadData* pData;
	CSimpleList list;
	list.Construct(offsetof(MyThreadData, pNext)); // 告诉CSimpleList类pNext成员的偏移量

	// 向链表中添加成员
	for(int i=0; i<10; i++)
	{
		pData = new MyThreadData;
		pData->nSomeData = i;
		list.AddHead(pData);
	}

	// …………   // 使用链表中的数据

	// 遍历整个链表,释放MyThreadData对象占用的空间
	pData = (MyThreadData*)list.GetHead();
	while(pData != NULL)
	{
		MyThreadData* pNextData = pData->pNext;
		printf(" The value of nSomeData is: %d \n", pData->nSomeData);
		delete pData;
		pData = pNextData;
	}
}

*/


/*

// 使用CTypedSimpleList类模板的例子

struct MyThreadData
{
	MyThreadData* pNext;
	int nSomeData;
};

void main()
{
	MyThreadData* pData;
	CTypedSimpleList<MyThreadData*> list;
	list.Construct(offsetof(MyThreadData, pNext));

	// 向链表中添加成员
	for(int i=0; i<10; i++)
	{
		pData = new MyThreadData;
		pData->nSomeData = i;
		list.AddHead(pData);
	}

	// …………   // 使用链表中的数据

	// 遍历整个链表,释放MyThreadData对象占用的空间
	pData = list;  // 调用了成员函数 operator TYPE(),相当于“pData = list.GetHead();”语句
	while(pData != NULL)
	{
		MyThreadData* pNextData = pData->pNext;
		printf(" The value of nSomeData is: %d \n", pData->nSomeData);
		delete pData;
		pData = pNextData;
	}
}



*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -