多线程编程CreateThread和_beginthreadex用法
多线程编程
1.CreateThread
HANDLE WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //内核对象的安全属性
SIZE_T dwStackSize, //线程栈大小
LPTHREAD_START_ROUTINE lpStartAddress, //线程函数地址
LPVOID lpParameter, //传给线程函数的参数
DWORD dwCreationFlags, //控制位
LPDWORD lpThreadId //获取线程id
);
参数解释:
第一个参数是线程内核对象的安全属性,一般传入NULL表示使用默认设置。
第二个参数是线程栈空间的大小。传入0表示使用默认大小(1MB)。
第三个参数是新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。
第四个参数是传给线程函数的参数。typedef void * LPVOID
第五个参数是用来控制线程的创建,0表示创建后立即执行。
第六个参数是传出参数,用来获得线程的id。显然,传入NULL,表示调用者并不想知道线程的id。
返回值:线程句柄
3.线程函数的声明。#define WINAPI __stdcall (vs2013)typedef unsigned long DWORD。其中,__stdcall是指C/CPP中函数的调用方式。主要有两点:1.实参从右向左入栈。2.调用者负责清空参数栈。
4.线程等待函数
DWORD WINAPI WaitForMultipleObjects(
DWORD nCount, //内核对象的个数
CONST HANDLE *lpHandles, //句柄数组的地址
BOOL bWaitAll, //是否等待所有
DWORD dwMilliseconds //等待的最大时间,单位毫秒,INFINITE表示无限等待
);
函数功能:让线程进入等待转态,直到条件触发。内核对象在运行期间处于未触发的状态,直到执行结束。
5.线程函数类型是
typedef DWORD (WINAPI *PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter);
更简洁的是
typedef unsigned long (__stdcall pfun)(void);
2._beginthreadex
函数原型
uintptr_t __cdecl _beginthreadex(
void* _Security,
unsigned _StackSize,
_beginthreadex_proc_type _StartAddress,
void* _ArgList,
unsigned _InitFlag,
unsigned* _ThrdAddr
);
它的参数类型和CreateThread基本一致,只是线程函数类型稍有不同。线程函数类型是
typedef unsigned (__stdcall _beginthreadex_proc_type)(void);
3._beginthread
_beginthread的原型
uintptr_t _beginthread(
_beginthread_proc_type _StartAddress, //线程函数的地址
unsigned _StackSize, //线程栈的大小
void* _ArgList //线程函数的参数
);
函数功能:使用指定线程函数创建线程,并返回线程句柄。
几点解释:
1.typedef unsigned int * uintptr_t;
2.typedef void(__cdecl _beginthread_proc_type)(void); _beginthread_proc_type就是一函数指针类型,我们提供的线程函数应该如此设计:只有一个参数,类型为void*,且返回值类型是void。
CreateThread和_beginthread的使用说明:
从函数参数可以看出,CreateThread用于对所创建的线程进行精细控制。在很多参数处于默认设置下,建议使用参数简单的_beginthread。
两者所需的线程函数类型不同。
一般情况下,使用_beginthread创建多线程。
多线程编程CreateThread和_beginthreadex用法相关推荐
- 多线程之 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 【转】windows多线程CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 一个基于C++的多线程编程实例(CreateThread函数)
本博客主要总结了基于C++的多线程函数CreateThread,互斥锁(或者称资源独占)函数CreateMutex,等待资源函数WaitForSingleObject,关闭线程函数(其实是关闭线程的句 ...
- 详解Java多线程编程中LockSupport类的线程阻塞用法
转载自 详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际 ...
- 多线程编程(7) - 从 CreateThread 说起[续五]
function CreateThread(lpThreadAttributes: Pointer; {安全设置}dwStackSize: DWORD;lpStartAddress: TFNThrea ...
- c语言createthread函数用法,C++多线程函数CreateThread如何使用?
C++ CreateThread函数如何传递this指针作为参数 C++多线程函数CreateThread如何使用? #include #include using namespace std; /* ...
- Python多线程编程(一):threading 模块 Thread 类的用法详解
我们进行程序开发的时候,肯定避免不了要处理并发的情况. 一般并发的手段有采用多进程和多线程. 但线程比进程更轻量化,系统开销一般也更低,所以大家更倾向于用多线程的方式处理并发的情况. Python 提 ...
- Win32多线程编程(3) — 线程同步与通信
一.线程间数据通信 系统从进程的地址空间中分配内存给线程栈使用.新线程与创建它的线程在相同的进程上下文中运行.因此,新线程可以访问进程内核对象的所有句柄.进程中的所有内存以及同一个进程中其他所有线程的 ...
最新文章
- 【Win10 应用开发】语音命令与App Service集成
- 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
- Java DOC 转换给 PDF 格式文档的代码
- 麦克风增强软件_麦克风电流声去除方法(不花一分钱去电流声)
- Oracle ADF开发实战指南pdf
- 程序员必看—程序员如何高效提升自己?
- Cause: java.io.IOException: Could not find resource com/itheima/po/CustomerMapper.xml
- B端产品运营基本工作内容
- c# Stack源码解析
- LoRa:SX1278
- 百度DuerOS硅谷公布普罗米修斯计划,100万美金基金吸引AI才俊
- pycharm遇坑指南(win32gui)
- 一些iOS实用Demo
- linkerd服务网格调研笔记
- 谈谈我对 iPhone5 全景照相机 的理解
- Google OAUTH + OpenID 给第三方授权
- mongodb count查询记录条数
- PS 父图层与子图层
- 给Java程序员的一些中肯建议,你还在虚度光阴吗?
- TTL与CMOS使用区别