Win32--进程锁--进程异步--进程互斥--CreateMutex--OpenMutex--WaitForSingleObject--ReleaseMutex

it2023-01-19  56

  如果多个进程对同一个文件进行操作,一定要加锁,否则文件会发生不可以预知的异常,或者结果不可以预测。 1.CreateMutex函数   功能:作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。

HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 BOOL bInitialOwner, // 初始化互斥对象的所有者 LPCTSTR lpName // 指向互斥对象名的指针 );

2.OpenMutex函数   功能:作用是为现有的一个已命名互斥体对象创建一个新句柄。

HANDLE OpenMutex( DWORDdwDesiredAccess, // access BOOLbInheritHandle, // inheritance option LPCTSTRlpName // object name );

  参数说明:   第一个参数表示访问权限,对互斥量一般传入MUTEX_ALL_ACCESS。详细解释可以查看MSDN文档。   第二个参数表示互斥量句柄继承性,一般传入TRUE即可。   第三个参数表示名称。某一个进程中的线程创建互斥量后,其它进程中的线程就可以通过这个函数来找到这个互斥量。   函数访问值:成功返回一个表示互斥量的句柄,失败返回NULL。

3.WaitForSingleObject函数   功能:WaitForSingleObject函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。

DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );

4.ReleaseMutex函数   功能:它是一种线性指令,释放线程拥有的互斥体的控制权。

BOOL WINAPI ReleaseMutex( _In_ HANDLE hMutex );

  参数说明:访问互斥资源前应该要调用等待函数,结束访问时就要调用ReleaseMutex()来表示自己已经结束访问,其它线程可以开始访问了。

一般互斥使用形式如下:

bool ACopyFileExt(std::string src_filename, std::string dst_filename) { HANDLE mutex; mutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "ACopyFileExt"); if (mutex == NULL) { mutex = CreateMutex(NULL, FALSE, "ACopyFileExt"); } WaitForSingleObject(mutex, INFINITE); //功能区 bool rlt = ACopyFile(src_filename, dst_filename); ReleaseMutex(mutex); return rlt; }

  欢迎光临知了软件开发网络平台,本公司定制开发各类软件,主要方向为桌面专业软件开发和插件定制开发,桌面软件主要包括文字图形识别类软件,信息管理类软件,3D打印类软件,视频类软件以及其它涉及专业的各类图形图像处理软件。插件包含AE插件,AI插件,PS插件,PDF插件,3DMAX插件以及Word,Excel等Office插件开发。详情请咨询,微信QQ:312117271,手机:18928899728,邮箱: anjingzhi_sea@163.com. 公司网址:http://www.zhiliaos.com

最新回复(0)