创建线程的函数CreateThread
主线程的进入点函数的名字必须是main、main、WinMain或wWinMain,其它线程必须用不同的名字
主线程的进入点函数传递了字符串参数,因此可以使用 ANSI/Unicode版本的进入点函数:main/wmain和WinMain/wWinMain。
线程函数必须返回一个值,它将成为该线程的退出代码。
线程函数(实际上是我们的所有函数)应该尽可能使用函数参数和局部变量。
CreateThread函数
LPSECURITY_ATTRIBUTES lpsa,
DWORD cbStack,
LPTHREAD_START_ROUTINE lpStartAddr,
LPVOID lpvThreadParam,
DWORD fdwCreate,
LPDWORD lpIDThread
);
当CreateThread被调用时,系统创建一个线程内核对象。( _beginthreadex也可以创建线程)
见内核对象
该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。这与进程和进程内核对象之间的关系是相同的。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。
参数lpsa
psa参数一般给它传NULL。
psa参数是指向SECURITY_ATTRIBUTES结构的指针,见:内核对象的安全性
参数cbStack
cbStack参数一般给它传0.
cbStack参数用于设定线程可以将多少地址空间用于它自己的堆栈。
CreateProcess使用存放在可执行文件中的一个值。可以使用链接程序的/STACK开关来控制这个值:reserve参数用于设定系统应该为线程堆栈保留的地址空间量。默认值是 1 MB。Commit参数用于设定开始时应该承诺用于堆栈保留区的物理存储器的容量。默认值是 1页。
参数pfnStartAddr和pvParam
pfnStartAddr参数为要执行的线程函数的地址(即线程函数名)
pvParam参数为要传给线程的参数(也只能有一个参数,可以是简单类型、结构类型等)
参数fdwCreate
fdwCreate参数一般给它传0。
如果给该参数传 CRETE_SUSPENDED,系统可以完整地创建线程并对它进行初始化,但是要暂停该线程的运行,这样它就无法进行调度。CRETE_SUSPENDED标志使得应用程序能够在它有机会执行任何代码之前修改线程的某些属性。不过一般没有这个需要,呵呵。
参数pdwThreadID
它必须是DWORD的一个有效地址,使用这个地址来存放系统分配给新线程的ID。
转载于:https://blog.51cto.com/rosehacker/449476
创建线程的函数CreateThread相关推荐
- 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )
文章目录 I . JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ...
- 使用CreateThread函数创建线程
线程是进程中的一个实体,是被系统独立调度和分派的基本单位.一个进程可以拥有多个线程,但是一个线程必须有一个进程.线程自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于一个进程的其它线程 ...
- CreateThread函数--创建线程
微软在Windows API中提供了建立新的线程的函数CreateThread, 概述: 当使用CreateProcess调用时,系统将创建一个进程和一个主线程.CreateThread将在主线程的基 ...
- windows系统中创建线程常用哪几个函数,有什么区别?
windows系统中创建线程常用哪几个函数? 在windows系统中创建线程的函数有: CreadThread,AfxBeginThread,_beginthread,_beginthreadex. ...
- clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- c语言createthread函数用法,C++多线程函数CreateThread如何使用?
C++ CreateThread函数如何传递this指针作为参数 C++多线程函数CreateThread如何使用? #include #include using namespace std; /* ...
- 易语言创建线程挂起线程恢复线程销毁线程
线程创建CreateThread,线程挂起SuspendThread,线程恢复ResumeThread,线程销毁TerminateThread,都是kernel32的命令,我们自己封装这些线程的命令, ...
- C++多线程:thread类创建线程的多种方式
文章目录 描述 函数成员简介 总结 描述 头文件 <thread> 声明方式:std::thread <obj> 简介 线程在构造关联的线程对象时立即开始执行,从提供给作为构造 ...
最新文章
- 聚类热图怎么按自己的意愿调整分支的顺序?
- “记住密码“功能的正确设计
- 以太坊知识教程------智能合约(3)函数修饰符
- 数据库学习(MySQL):JDBC的简单增删改查实现
- 线性模型(3):Logistic Regression
- LoadRunner
- 计算机级用英语怎么说,计算机国家一级用英语怎么说
- Eclipse中,lombok安装
- matlab将多个nc文件进行合成TIF
- Dos Cmd命令整理
- PcShare2005代码阅读(1)
- Office Tool Plus软件运行错误,缺少.net
- 没有你 万般精彩皆枉然
- CouchDB安装与使用
- Easyexcel导入导出多个sheet
- opencv教程CV2模块——图片处理,HSV、色调、亮度调节
- 手游平台哪些比较好?
- 基于Matlab的小学毕业班成绩总评模糊聚类分析
- iOS系统最好的拨号app_我是亲民_新浪博客
- 传感器发展历史(详细)
热门文章
- jmeter脚本增强
- 8年架构师针对web前端小白,作出的职业规划建议
- 刚毕业想学习web前端,该怎么学才能最快入门?
- 畅易阁老是显示服务器忙,畅易阁全服开放 盘点天龙玩家卖号的几大原因
- php自带解压缩,PHP自带ZIP压缩、解压缩类ZipArchiv使用指南_PHP教程
- php简单的登录界面,PHP实现简单用户登录界面
- java jsp公共异常页面_Java如何创建JSP错误页面以处理异常?
- an7062个引脚工作电压_马兰士PM711AV功放电路原理分析
- java textfield方法,Java TextField求教育
- tornado异步请求响应速度的实例测试