15,471
社区成员
发帖
与我相关
我的任务
分享
/* ************************************
*《精通Windows API》
* 示例代码
* CreateThread.c
* 6.3.1 创建线程、退出线程、获取线程信息
**************************************/
/* 头文件 */
#include <windows.h>
#include <stdio.h>
/* 常量定义 */
#define MAX_THREADS 5
/* 结构类型 */
typedef struct _THREAD_PARAM {
DWORD i;
DWORD dwRandom;
DWORD dwData;
} THREAD_PARAM, *LPTHREAD_PARAM;
/*************************************
* DWORD WINAPI ThreadProc( LPVOID lpParam )
* 功能 线程函数
* 将参数打印出
*
* 参数 LPVOID lpParam THREAD_PARAM 结构类型
**************************************/
DWORD WINAPI ThreadProc( LPVOID lpParam )
{
LPTHREAD_PARAM pData;
// 参数数据类型
pData = (LPTHREAD_PARAM)lpParam;
// 显示参数
printf("TID = %u,\t Parameters = %u, %u, %u\n",
GetCurrentThreadId(),
pData->i, pData->dwRandom, pData->dwData);
// 释放保存参数的内存(在主线程中分配的).
HeapFree(GetProcessHeap(), 0, pData);
return 0;
}
/*************************************
* void main()
* 功能 主线程函数,创建了多个线程
**************************************/
void main()
{
LPTHREAD_PARAM pData;
DWORD dwThreadId[MAX_THREADS];
HANDLE hThread[MAX_THREADS];
int i;
// 创建MAX_THREADS 个线程.
for( i=0; i<MAX_THREADS; i++ )
{
// 为线程函数参数分配内存
pData = (LPTHREAD_PARAM)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(THREAD_PARAM));
if( pData == NULL )
{
printf("HeapAlloc error;\n");
ExitProcess(2);
}
// 设置参数
pData->i = i;
pData->dwRandom = rand();
pData->dwData = 100;
// 创建线程
hThread[i] = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
ThreadProc, // 线程函数
pData, // 参数
0, // 默认创建标志
&dwThreadId[i]); // 返回TID
// 判断是否创建成功
//线程是在什么时候调用线程构造函数的???
if (hThread[i] == NULL)
{
ExitProcess(i);
}
}
getchar();
}