function CreateThread(lpThreadAttributes: Pointer; {安全设置}dwStackSize: DWORD;lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD;var lpThreadId: DWORD
): THandle; stdcall;

CreateThread 的第一个参数 lpThreadAttributes 是指向 TSecurityAttributes 结构的指针, 一般都是置为 nil, 这表示没有访问限制; 该结构的定义是:


//TSecurityAttributes(又名: SECURITY_ATTRIBUTES、_SECURITY_ATTRIBUTES)
_SECURITY_ATTRIBUTES = recordnLength: DWORD;                {结构大小}lpSecurityDescriptor: Pointer; {默认 nil; 这是另一个结构 TSecurityDescriptor 的指针}bInheritHandle: BOOL;          {默认 False, 表示不可继承}
end;//TSecurityDescriptor(又名: SECURITY_DESCRIPTOR、_SECURITY_DESCRIPTOR)
_SECURITY_DESCRIPTOR = recordRevision: Byte;Sbz1: Byte;Control: SECURITY_DESCRIPTOR_CONTROL;Owner: PSID;Group: PSID;Sacl: PACL;Dacl: PACL;
end;

够复杂的, 但我们在多线程编程时不需要去设置它们, 大都是使用默认设置(也就是赋值为 nil).

我觉得有必要在此刻了解的是: 建立系统内核对象时一般都有这个属性(TSecurityAttributes);
在接下来多线程的课题中要使用一些内核对象, 不如先盘点一下, 到时碰到这个属性时给个 nil 即可, 不必再费神.

{建立事件}
function CreateEvent(lpEventAttributes: PSecurityAttributes; {!}bManualReset: BOOL;bInitialState: BOOL;lpName: PWideChar
): THandle; stdcall;{建立互斥}
function CreateMutex(lpMutexAttributes: PSecurityAttributes; {!}bInitialOwner: BOOL;lpName: PWideChar
): THandle; stdcall;{建立信号}
function CreateSemaphore(lpSemaphoreAttributes: PSecurityAttributes; {!}lInitialCount: Longint;lMaximumCount: Longint;lpName: PWideChar
): THandle; stdcall;{建立等待计时器}
function CreateWaitableTimer(lpTimerAttributes: PSecurityAttributes; {!}bManualReset: BOOL;lpTimerName: PWideChar
): THandle; stdcall;

上面的四个系统内核对象(事件、互斥、信号、计时器)都是线程同步的手段, 从这也能看出处理线程同步的复杂性; 不过这还不是全部, Windows Vista 开始又增加了 Condition variables(条件变量)、Slim Reader-Writer Locks(读写锁)等同步手段.

不过最简单、最轻便(速度最快)的同步手段还是 CriticalSection(临界区), 但它不属于系统内核对象, 当然也就没有句柄、没有 TSecurityAttributes 这个安全属性, 这也导致它不能跨进程使用; 不过写多线程时一般不用跨进程啊, 所以 CriticalSection 应该是最常用的同步手段.

下次接上, 开始学习多线程的同步了.


多线程编程(7) - 从 CreateThread 说起[续五]相关推荐

  1. C++使用Windows API CreateMutex函数多线程编程

    C++中也可以使用Windows 系统中对应的API函数进行多线程编程.使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步: #includ ...

  2. 多线程编程CreateThread和_beginthreadex用法

    多线程编程 1.CreateThread HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //内核对象的安全 ...

  3. [转]Linux 的多线程编程的高效开发经验

    Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...

  4. 多线程编程有什么用途_C++ 多线程编程 (一)

    What is thread? In computer science, a thread of execution is the smallest sequence of programmed in ...

  5. C++使用thread类多线程编程

    目录 pthread多线程 系统自带CreateThread std::thread c++ 多线程总结_jacke121的专栏-CSDN博客 std thread比较好用,但是系统带的socket不 ...

  6. Windows多线程编程总结

    Windows 多线程编程总结 keyword:多线程 线程同步 线程池 内核对象 1 内核对象 1 .1 内核对象的概念 内核对象是内核分配的一个内存块,这样的内存块是一个数据结构,表示内核对象的各 ...

  7. Linux 的多线程编程的高效开发经验

    背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文 ...

  8. pthread多线程编程的学习小结

    pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 -- DevStore p ...

  9. Win32 API 多线程编程示例 - 窗口版

    网上有一些Win32 多线程编程示例,多是控制台版本:下面哥作一个窗口版本: /*-------------------------------------------------bobo, 2020 ...

最新文章

  1. MapReduce开发总结
  2. linux 修改时区_如何在 Ubuntu 20.04 上设置或者修改时区
  3. ERROR: tensorboard 1.14.0 has requirement setuptools=41.0.0, but you'll have setuptools 39.1.0 whic
  4. 带你入门 CSS Grid 布局
  5. 电子元器件首饰!送给你喜欢的女孩!
  6. EPC Class0 Gen1标签识别代码C++
  7. servlet下根据相对路径找资源
  8. 02-eclipse中使用git
  9. 二维凸包 Graham扫描算法
  10. 龙星电脑横机制版软件_龙星制版软件下载 龙星电脑横机是什么系统
  11. android 命令pm 全称 packagemanager,Android.content.pm.PackageManager--(转载)
  12. word小技巧 将图片批量居中
  13. 参考文献类型标识码--中英文对照
  14. UTF-8编码占几个字节?
  15. 深信服:Weblogic集群负载均衡技术解决方案
  16. arcgis,裁剪投影不一致的矢量和栅格
  17. OpenHarmony HDF Input框架模块 按键控制LED基于小熊派micro
  18. 02 夯实根基,web网页基础
  19. 使用tesseract训练自己的字库提高识别率
  20. OI回忆录第一章 逐梦之始

热门文章

  1. Windows单机之Weblogic 12c受管服务器配置
  2. php+代码模板下载地址,简单而强大的PHP模板引擎
  3. Python中TypeError: ‘str‘ object is not callable
  4. 文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突
  5. mysql解压版配置win8_Windows安装mysql8解压版
  6. c++获取一段代码的执行时间_微软IE浏览器JScript脚本引擎远程代码执行漏洞通告...
  7. linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
  8. 计算机原理 ---- 程序之下
  9. nginx ---- nginx.conf核心配置文件
  10. 用java编写程序_用JAVA编写程序