多线程编程

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用法相关推荐

  1. 多线程之 CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...

  2. 【转】windows多线程CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...

  3. 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...

  4. 一个基于C++的多线程编程实例(CreateThread函数)

    本博客主要总结了基于C++的多线程函数CreateThread,互斥锁(或者称资源独占)函数CreateMutex,等待资源函数WaitForSingleObject,关闭线程函数(其实是关闭线程的句 ...

  5. 详解Java多线程编程中LockSupport类的线程阻塞用法

    转载自  详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际 ...

  6. 多线程编程(7) - 从 CreateThread 说起[续五]

    function CreateThread(lpThreadAttributes: Pointer; {安全设置}dwStackSize: DWORD;lpStartAddress: TFNThrea ...

  7. c语言createthread函数用法,C++多线程函数CreateThread如何使用?

    C++ CreateThread函数如何传递this指针作为参数 C++多线程函数CreateThread如何使用? #include #include using namespace std; /* ...

  8. Python多线程编程(一):threading 模块 Thread 类的用法详解

    我们进行程序开发的时候,肯定避免不了要处理并发的情况. 一般并发的手段有采用多进程和多线程. 但线程比进程更轻量化,系统开销一般也更低,所以大家更倾向于用多线程的方式处理并发的情况. Python 提 ...

  9. Win32多线程编程(3) — 线程同步与通信

    一.线程间数据通信 系统从进程的地址空间中分配内存给线程栈使用.新线程与创建它的线程在相同的进程上下文中运行.因此,新线程可以访问进程内核对象的所有句柄.进程中的所有内存以及同一个进程中其他所有线程的 ...

最新文章

  1. 【Win10 应用开发】语音命令与App Service集成
  2. 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
  3. Java DOC 转换给 PDF 格式文档的代码
  4. 麦克风增强软件_麦克风电流声去除方法(不花一分钱去电流声)
  5. Oracle ADF开发实战指南pdf
  6. 程序员必看—程序员如何高效提升自己?
  7. Cause: java.io.IOException: Could not find resource com/itheima/po/CustomerMapper.xml
  8. B端产品运营基本工作内容
  9. c# Stack源码解析
  10. LoRa:SX1278
  11. 百度DuerOS硅谷公布普罗米修斯计划,100万美金基金吸引AI才俊
  12. pycharm遇坑指南(win32gui)
  13. 一些iOS实用Demo
  14. linkerd服务网格调研笔记
  15. 谈谈我对 iPhone5 全景照相机 的理解
  16. Google OAUTH + OpenID 给第三方授权
  17. mongodb count查询记录条数
  18. PS 父图层与子图层
  19. 给Java程序员的一些中肯建议,你还在虚度光阴吗?
  20. TTL与CMOS使用区别

热门文章

  1. 斐波那契数列使用递归的运行时间分析
  2. 一种定位程序失去焦点的办法,元凶竟然是tx电脑管家!
  3. 这种小菜帮助白发变黑
  4. LeanCloud注册与使用
  5. windwos利用命令行结束进程, tasklist和taskkill命令
  6. 关于在IE下打印页面背景图片和背景颜色丢失的解决方案
  7. MySQL高级【行级锁】
  8. Mybatis的where标签
  9. 易维帮助台助力盟广信息践行高效IT服务管理
  10. 带你图文解析ArrayList源码