原理分析:
互斥对象是系统内核对象,各个线程都可以拥有它,谁拥有它谁就可以执行
执行完毕,用ReleaseMutex 函数释放拥有权,以让其他等待的线程可以使用
其他线程可以使用 WaitForSingleObject函数排队等待(等待也可以理解为排队申请)
使用过程
var hMutex: THandle; {应该先声明一个全局的互斥句柄} CreateMutex {建立互斥对象} WaitForSingleObject {用等待函数排队等候} ReleaseMutex {释放拥有权} CloseHandle {最后释放互斥对象}
ReleaseMutex、CloseHandle 的参数都是 CreateMutex 返回的句柄,关键是 CreateMutex函数
function CreateMutex( lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; {是否让创建者(此例中的主线程)拥有该互斥对象} lpName: PwideChar {可以给此互斥对象取个名字,如果不要名字可以赋值为 nil} ): THandle;
1、第一个参数前面说过
2、第二个参数在这里一定要是 False,如果让主线程拥有互斥,从理论上讲,得等程序退出后其他线程才有机会
取值为 False时,第一个执行的线程将会最先拥有互斥对象,一旦拥有其他线程就得先等等
3、第三个参数,如果给个名字,函数将从系统中寻找是否拥有重名的互斥对象,如果有则返回同名对象存在的句柄
如果赋值为nil将直接创建一个新的互斥对象,下个例子将会有名字
本例的效果图
代码如下
时间: 2024-10-06 13:16:10