作者:lily-SweetDream_828 | 来源:互联网 | 2023-09-25 14:31
以下函数以Delphi2009中的函数格式为准。该过程多半在窗体创建时或在程序初始化时执行。其声明如下:procedureInitializeCriticalSection;s
以下同步技术通常有两种:直接使用WindowsAPI函数和使用
Delphi封装API函数的类。
以下函数符合Delphi2009函数格式:
1 .关键区段临界区
关键节是最直接的线程同步方式。 关键节是一次只能在一个线程上运行的段
代码。 例如,如果将初始化数组的代码放在临界区域内,则另一个线程在第一个线程处理完毕之前无法进行
已执行。 关键节速度很快,因此非常适合序列化对单个进程中数据的访问。
(1) .使用EnterCriticalSection (和LeaveCriticalSection ) ) API函数
在使用关键节之前,必须定义并使用TRTLCriticalSection类型的记录变量
InitializeCriticalSection ()过程初始化临界区域。 此过程大部分发生在创建表单或初始化程序时
点击
其声明如下
procedureinitializecriticalsection (varlpcriticalsection : trtlcriticalsection; stdcall;
lpCriticalSection参数是TRTLCriticalSection类型的记录,是参数。 关于
TRTLCriticalSection的定义并不重要,因为很少看到此记录的具体内容。
只需在lpCriticalSection中传递未初始化的记录,InitializeCriticalSection (
填补这个记录。
注意:微软故意隐藏了TRTLCriticalSection的详细信息。 为什么这么说,是因为其内容位于不同的硬件平台上
2
上面不是。 在基于Intel的平台上,TRTLCriticalSection显示计数器和当前
线程的域和系统事件的句柄。 在alpha平台上,计数器将被称为spinlock的alpha-CPU数据结构所替换。
记录填写后,我们可以开始创建临界区。 在这种情况下,可以使用EnterCriticalSection ()和
LeaveCriticalSection ) )封装代码块。 这两个函数分别表示进入和离开临界区域,是同步的
代码块位于这两个函数之间。 第一个线程调用EnterCriticalSection ()后,所有其他线程
线程将无法进入代码块,并等待第一个线程离开关键节。 下一个线程等待调整第一个线程
可以使用LeaveCriticalSection () ) )来唤醒。 这两个进程的声明如下:
procedureentercriticalsection (varlpcriticalsection : trtlcriticalsection; stdcall; //进入临界区
procedureleavecriticalsection (varlpcriticalsection : trtlcriticalsection; stdcall; //离开临界
区
如您所见,参数lpCriticalSection是用InitializeCriticalSection ()填充的记录。
如果在一个子线程运行EnterCriticalSection ()之前,另一个线程已进入临界区域且尚未离开
打开关键节后,其子线程将锁定,并无限期等待另一个线程离开关键节。 要使时间为0而不锁定
等等,必须使用TryEnterCriticalSection ()。 进程声明如下:
函数加密(varlpcriticalsection 3360 trtlcriticalsection ) :布尔; stdcall;
本文来自电脑杂谈,转载请注明正文网站:
3358 www.PC-LHD yx.com/a/jisuanji Xue/article-32871-13.html