易语言读写锁源码
系统结构:分配读写锁,释放,创建,销毁,读进入,读退出,写进入,写退出,原子锁_必进,读线程回调,写线程回调,创建线程,CreateEventA,WaitForSingleObject,ResetEvent,SetEvent,CreateThread,CloseHandle,RtlMoveMemory_写整数,RtlMoveMemory_读整数,
======读写锁类
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 分配读写锁
| |
| |------ 释放
| |
| |------ 创建
| |
| |------ 销毁
| |
| |------ 读进入
| |
| |------ 读退出
| |
| |------ 写进入
| |
| |------ 写退出
| |
| |------ 原子锁_必进
| |
| |
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ __启动窗口_将被销毁
| |
| |------ _按钮1_被单击
| |
| |------ _按钮2_被单击
| |
| |------ 读线程回调
| |
| |------ 写线程回调
| |
| |------ 创建线程
| |
| |
======调用的Dll
| |
| |---[dll]------ CreateEventA
| |
| |---[dll]------ _原子锁_整数
| |
| |---[dll]------ _原子锁_逻辑
| |
| |---[dll]------ _原子锁_指针
| |
| |---[dll]------ WaitForSingleObject
| |
| |---[dll]------ _原子加
| |
| |---[dll]------ _原子减
| |
| |---[dll]------ _原子_加减
| |
| |---[dll]------ ResetEvent
| |
| |---[dll]------ SetEvent
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ RtlMoveMemory_写整数
| |
| |---[dll]------ RtlMoveMemory_读整数
| |
| |---[dll]------ _分配内存
| |
| |---[dll]------ _释放内存
调用的DLL命令:
.DLL命令 CreateEventA, 整数型, "kernel32", "CreateEventA", , 创建一个事件对象 如执行成功,返回事件对象句柄;零表示出错。会设置GetLastError。即使返回一个有效的句柄,但同时指出指定的名字已经存在,GetLastError也会设为ERROR_ALREADY_EXISTS
.参数 lpEventAttributes, 整数型, , SECURITY_ATTRIBUTES,指定一个结构,用于设置对象的security特性。如变成ByVal As 并传递零值,则表明使用对象默认的security设置
.参数 bManualReset, 整数型, , 如果为TRUE,表示创建一个人工重设事件;如果为FALSE,表示创建一个自动重设事件
.参数 bInitialState, 整数型, , 如事件应内部进入触发状态,则为TRUE
.参数 lpName, 整数型, , 指定事件对象的名字。用vbNull创建一个未命名事件对象。如已经存在拥有这个名字的一个事件,则现有的命名事件就会打开。这个名字可能不与一个现有互斥体、信号机、可等待计时器或文件映射的名字相符;
.DLL命令 _原子锁_整数, 整数型, "kernel32.dll", "InterlockedCompareExchange", , 返回修改前变量的值
.参数 Destination, 整数型, 传址, 指向一个32位变量的指针
.参数 Exchange, 整数型, , 比较成功后要替换的值
.参数 Comperand, 整数型, , 和当前值进行比较的值
.DLL命令 _原子锁_逻辑, 逻辑型, "kernel32.dll", "InterlockedCompareExchange", , 返回修改前变量的值
.参数 Destination, 逻辑型, 传址, 指向一个32位变量的指针
.参数 Exchange, 逻辑型, , 比较成功后要替换的值
.参数 Comperand, 逻辑型, , 和当前值进行比较的值
.DLL命令 _原子锁_指针, 整数型, "kernel32.dll", "InterlockedCompareExchange", , 返回修改前变量的值
.参数 Destination, 整数型, , 指向一个32位变量的指针
.参数 Exchange, 整数型, , 比较成功后要替换的值
.参数 Comperand, 整数型, , 和当前值进行比较的值
.DLL命令 WaitForSingleObject, 整数型, "kernel32", "WaitForSingleObject", , 监测一个对象
.参数 hHandle, 整数型
.参数 dwMilliseconds, 整数型
.DLL命令 _原子加, 整数型, "kernel32", "InterlockedIncrement", , , 返回修改前变量的值,互锁函数对一个32变量进行增1操作,函数都是16位和64位版本。
.参数 Destination, 整数型, 传址
.DLL命令 _原子减, 整数型, "kernel32", "InterlockedDecrement", , , 返回修改前变量的值,互锁函数对一个32变量进行减1操作,函数都是16位和64位版本。
.参数 Destination, 整数型, 传址
.DLL命令 _原子_加减, 整数型, "kernel32.dll", "InterlockedExchangeAdd", , , 返回修改前变量的值,互锁函数提供了对变量进行加法操作,保证了同一时刻只有一个线程对这个变量进行加法操作。Value是正数的时候进行加法操作,是负数的时候进行减法操作。
.参数 Destination, 整数型, , 指向一个32位变量的指针
.参数 Value, 整数型, , 共享变量上要加的值
.DLL命令 ResetEvent, 整数型, "kernel32", "ResetEvent", , 复位事件对象
.参数 hEvent, 整数型
.DLL命令 SetEvent, 整数型, "kernel32", "SetEvent", , 设置事件对象
.参数 hEvent, 整数型
.DLL命令 CreateThread, 整数型, "Kernel32", "CreateThread"
.参数 lpThreadAttributes, 整数型
.参数 dwStackSize, 整数型
.参数 lpStartAddress, 整数型
.参数 lpParameter, 整数型
.参数 dwCreationFlags, 整数型
.参数 lpThreadId, 整数型, 传址
.DLL命令 CloseHandle, 整数型, "Kernel32", "CloseHandle", , 关闭一个内核对象。其中包括文件、文件映射、进程、线程、security和同步对象等。
.参数 对象的句柄, 整数型, , hObject 欲关闭的一个对象的句柄
.DLL命令 RtlMoveMemory_写整数, , "kernel32.dll", "RtlMoveMemory"
.参数 目标数据, 整数型
.参数 原数据, 整数型, 传址
.参数 尺寸, 整数型
.DLL命令 RtlMoveMemory_读整数, , "kernel32.dll", "RtlMoveMemory"
.参数 目标数据, 整数型, 传址
.参数 原数据, 整数型
.参数 尺寸, 整数型
.DLL命令 _分配内存, 整数型, "kernel32.dll", "GlobalAlloc", , 成功返回值是一个指向内存块指针或内存块句柄,否则返回0
.参数 wFlags, 整数型, , GMEM_FIXED (值:0) 表示申请到的地址是固定的,GMEM_MOVEABLE,(值:2) 标志指定了分配的内存是可移动的 ,GMEM_DISCARDABLE ,(值:256) 在指定了GMEM_MOVEABLE后再指定此标志表示内存块是可丢弃的 ,GMEM_ZEROINIT,(值:64) 表示需要将内存块中的所有字节预先初始化为0 ,GPTR,(值:64) 表示GMEM_FIXED和GMEM_ZEROINIT两个组合 ,GHND,(值:66) 表示GMEM_MOVEABLE和GMEM_ZEROINIT两个组合
.参数 dwBytes, 整数型, , 以字节为单位的内存的大小
.DLL命令 _释放内存, 整数型, "kernel32.dll", "GlobalFree", , 释放掉,先前申请一块固定的内存块,如果释放成功,返回值为NULL。否则返回值就是指向要释入的内存块的句柄
.参数 hMem, 整数型, , 指向一个内存块的指针,一般是先前用GlobalAlloc函数申请到的内存块.
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。