关于调用线程函数的问题

君童 2011-09-21 08:34:44

/* ************************************
*《精通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();
}
...全文
28 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
君童 2011-09-21
  • 打赏
  • 举报
回复
我在getchar()处和线程函数处设置了断点后发现线程函数每执行一遍程序就会回到getchar()处一次,然后再执行线程函数,这是为什么?
且线程函数是什么时候调用的?书上讲的不是很清楚,谢谢各位回答。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧