CreateThread
CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程。线程中止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关闭该线程对象。
- 中文名
- CreateThread
- 外文名
- CreateThread
- 声明位置
- processthreadsapi.h
- 返回值类型
- HANDLE
- 调用方式
- __stdcall
目录
- 1 步骤
- 2 函数原型
- 3 参数说明
- 4 内存泄漏
- 5 示例
CreateThread步骤
编辑
CreateThread函数原型
编辑
CreateThread参数说明
编辑
CreateThread内存泄漏
编辑
1
2
3
4
5
6
7
8
|
HANDLECreateThread(
LPSECURITY_ATTRIBUTESlpThreadAttributes, //线程安全属性
DWORDdwStackSize, //堆栈大小
LPTHREAD_START_ROUTINElpStartAddress, //线程函数
LPVOIDlpParameter, //线程参数
DWORDdwCreationFlags, //线程创建属性
LPDWORDlpThreadId //线程ID
);
|
CreateThread示例
编辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include <windows.h>
#include <strsafe.h>//win2003SDK必须安装 要不无此头文件。此文件是为了实现StringCchPrintf,StringCchLength。
#define MAX_THREADS 3
#define BUF_SIZE 255
typedef struct _MyData{
int val1;
int val2;
}MYDATA,*PMYDATA;
DWORD WINAPI ThreadProc( LPVOID lpParam)
{
HANDLE hStdout;
PMYDATA pData;
TCHAR msgBuf[BUF_SIZE];
size_tcchStringSize;
DWORD dwChars;
hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdout==INVALID_HANDLE_VALUE)
return 1;
//Cast the parameter to the correct data type.
pData=(PMYDATA)lpParam;
//Print the parameter values using thread-safe functions.
StringCchPrintf(msgBuf,BUF_SIZE,TEXT( "Parameters=%d,%d\n" ),
pData->val1,pData->val2);
StringCchLength(msgBuf,BUF_SIZE,&cchStringSize);
WriteConsole(hStdout,msgBuf,cchStringSize,&dwChars,NULL);
//Free the memory allocated by the caller for the thread
//data structure.
HeapFree(GetProcessHeap(),0,pData);
return 0;
}
void main()
{
PMYDATA pData;
DWORD dwThreadId[MAX_THREADS];
HANDLE hThread[MAX_THREADS];
int i;
//Create MAX_THREADS worker threads.
for (i = 0; i < MAX_THREADS; i++)
{
//Allocate memory for thread data.
pData=(PMYDATA)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
sizeof (MYDATA));
if (pData==NULL)
ExitProcess(2);
//Generate unique data for each thread.
pData->val1=i;
pData->val2=i+100;
hThread[i]=CreateThread(
NULL, //default security attributes
0, //use default stack size
ThreadProc, //thread function
pData, //argument to thread function
0, //use default creation flags
&dwThreadId[i]); //returns the thread identifier
//Check there turn value for success.
if (hThread[i]==NULL)
{
ExitProcess(i);
}
}
//Wait until all threads have terminated.
WaitForMultipleObjects(MAX_THREADS,hThread,TRUE,INFINITE);
//Close all thread handle supon completion.
for (i=0;i<MAX_THREADS;i++)
{
CloseHandle(hThread[i]);
}
}
|
CreateThread相关推荐
- CreateThread、_beginthreadex、AfxBeginThread
1.CreateThread._beginthreadex.AfxBeginThread的区别和正确使用: CreateThread是一个Windows的API函数,_beginthreadex是一个 ...
- VC++ AfxBeginThread 与 CreateThread 的区别
简言之: AfxBeginThread是MFC的全局函数,是对CreateThread的封装. CreateThread是Win32 API函数,前者最终要调到后者. 具体说来,CreateT ...
- CreateThread创建线程函数详细讲解
CreateThread CreateThread函数创建一个要在调用进程的地址空间中执行的线程.(MSDN讲解如下) 处理CreateThread ( LPSECURITY_ATTRIBUTES l ...
- CreateThread 和_beginthreadex区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 一个基于C++的多线程编程实例(CreateThread函数)
本博客主要总结了基于C++的多线程函数CreateThread,互斥锁(或者称资源独占)函数CreateMutex,等待资源函数WaitForSingleObject,关闭线程函数(其实是关闭线程的句 ...
- 用_beginthreadex不用 CreateThread
http://www.cnblogs.com/lcchuguo/p/5224576.html 在用visual studio进行界面编程时(如MFC),前台UI我们能够通过MFC的消息循环机制实现.而 ...
- CreateThread和CreateRemoteThread
文章目录 CreateThread 函数功能 函数原型 第一个参数: 第二个参数: 第三个参数: 第四个参数: 第五个参数: 第六个参数: 返回值: 补充: 代码实现 注意: CreateRemote ...
- 多线程之 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 多线程CreateThread函数的用法及注意事项
当使用CreateProcess调用时,系统将创建一个进程和一个主线程.CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤: 1在内核对象中分配一个线程标识/句柄,可供管理,由C ...
最新文章
- 三框架:使用数据源dbcp注意
- Google、亚马逊、微软 、阿里巴巴开源软件一览
- 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。
- 赶快使用Q-Dir软件,使您的文件夹操作更加高效
- 访存优化_Hibernate事实:多级访存
- windows下配置tensorflow
- KeeperErrorCode = Unimplemented for /test
- oracle 由32位迁移到64位的问题
- 解决Ubuntu系统“无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”的有效方法
- python面试必备10题_不吹不擂,你想要的Python面试都在这里了【315+道题】+精心整理的解答...
- java 汉字区位码表,中文汉字编码知识及各种中文编码对应的编码区间总结
- 利用计算机对调查问卷进行,关于电脑需求调查问卷
- IP6826无线充电底座方案IC芯片,兼容WPC Qi v1.2.4
- SpringBoot项目整合JasperReport报表生成PDF并下载
- 进程中出现n多的conime.exe怎么办
- 在计算机操作中粘贴的快捷键是什么,电脑复制粘贴的快捷键是什么
- 上传文件submit提交form表单 success返回数据多了div获取不到正确的返回数据
- 文献阅读:Improving neural networks by preventing co-adaptation of feature detectors
- 学完Python的7大就业方向,哪个赚钱多?
- 基于LAMP环境发布一个Discuz论坛网站
热门文章
- 登录页面html代码_【网络自动化平台开发】—— 登录组件
- Spring MVC -- 国际化
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法...
- 向maven中央仓库提交jar
- 设备管理学习之概念篇
- (转)创业需要知道的13句话
- 一年的天数 Exercise06_16
- 学习string,stringBuffer时遇到的问题
- 【hdoj_2079】选课时间(母函数)
- 《一江春水向东流》——任正非