- 浏览: 369744 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
我的测试代码如下
总结:
1)如果CreateEvent成功,那么OpenEvent也是可以成功的,运行多次就可以获取多个handle;
2)如果CreateEvent成功后,有一个或则多个OpenEvent是成功的,那么即使关闭最原始的Event,再次呼叫OpenEvent也是可以成功的;
OpenEvent function
Opens an existing named event object.
Syntax
Parameters
dwDesiredAccess [in]
The access to the event object. The function fails if the security descriptor of the specified object does not permit the requested access for the calling process. For a list of access rights, see Synchronization Object Security and Access Rights.
bInheritHandle [in]
If this value is TRUE, processes created by this process will inherit the handle. Otherwise, the processes do not inherit this handle.
lpName [in]
The name of the event to be opened. Name comparisons are case sensitive.
This function can open objects in a private namespace. For more information, see Object Namespaces.
Terminal Services: The name can have a "Global\" or "Local\" prefix to explicitly open an object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces.
Note Fast user switching is implemented using Terminal Services sessions. The first user to log on uses session 0, the next user to log on uses session 1, and so on. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.
Return value
If the function succeeds, the return value is a handle to the event object.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Remarks
The OpenEvent function enables multiple processes to open handles of the same event object. The function succeeds only if some process has already created the event by using the CreateEvent function. The calling process can use the returned handle in any function that requires a handle to an event object, subject to the limitations of the access specified in the dwDesiredAccess parameter.
The handle can be duplicated by using the DuplicateHandle function. Use the CloseHandle function to close the handle. The system closes the handle automatically when the process terminates. The event object is destroyed when its last handle has been closed.
HANDLE hTest = CreateEvent(NULL, FALSE, FALSE, "Global\\Hello"); //Handle 1 HANDLE hGetEvent1 = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\Hello"); //Handle 2 HANDLE hGetEvent2 = NULL; if (hTest != NULL) { CloseHandle(hTest); //Close handle 1 hTest = NULL; hGetEvent2 = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\Hello"); //Handle 2 exists, so we can get handle 3 }
HANDLE hGetEvent1 = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\Hello"); //Handle 1 HANDLE hTest = CreateEvent(NULL, FALSE, FALSE, "Global\\Hello"); //Handle 2 HANDLE hGetEvent2 = NULL; if (hTest != NULL) { CloseHandle(hTest); //Close handle 2 hTest = NULL; hGetEvent2 = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\Hello"); //Handle 1 & Handle 2 are invalid, so we can not get handle 3 }
总结:
1)如果CreateEvent成功,那么OpenEvent也是可以成功的,运行多次就可以获取多个handle;
2)如果CreateEvent成功后,有一个或则多个OpenEvent是成功的,那么即使关闭最原始的Event,再次呼叫OpenEvent也是可以成功的;
OpenEvent function
Opens an existing named event object.
Syntax
HANDLE WINAPI OpenEvent( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCTSTR lpName );
Parameters
dwDesiredAccess [in]
The access to the event object. The function fails if the security descriptor of the specified object does not permit the requested access for the calling process. For a list of access rights, see Synchronization Object Security and Access Rights.
bInheritHandle [in]
If this value is TRUE, processes created by this process will inherit the handle. Otherwise, the processes do not inherit this handle.
lpName [in]
The name of the event to be opened. Name comparisons are case sensitive.
This function can open objects in a private namespace. For more information, see Object Namespaces.
Terminal Services: The name can have a "Global\" or "Local\" prefix to explicitly open an object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces.
Note Fast user switching is implemented using Terminal Services sessions. The first user to log on uses session 0, the next user to log on uses session 1, and so on. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.
Return value
If the function succeeds, the return value is a handle to the event object.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Remarks
The OpenEvent function enables multiple processes to open handles of the same event object. The function succeeds only if some process has already created the event by using the CreateEvent function. The calling process can use the returned handle in any function that requires a handle to an event object, subject to the limitations of the access specified in the dwDesiredAccess parameter.
The handle can be duplicated by using the DuplicateHandle function. Use the CloseHandle function to close the handle. The system closes the handle automatically when the process terminates. The event object is destroyed when its last handle has been closed.
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1325https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
打开已有事件对象则使用OpenEvent() API。事件的状态可以通过SetEvent()、ResetEvent()和PulseEvent()来改变,影响等待该事件的线程的行为。 互斥体是另一种重要的同步机制,确保同一时刻只有一个线程能访问特定...
【Windows XP 进程同步】知识点详解 在Windows XP操作系统中,进程同步是多线程编程中的关键概念,确保多个线程能有效地共享资源并协调执行。本实验着重于理解和运用Windows XP中的线程同步机制,包括事件对象和...
在设计和实现线程同步时,开发者需要注意以下几点: 1. 避免死锁:确保线程获取资源的顺序一致,防止循环等待。 2. 减少同步开销:尽量使用轻量级的同步机制,如临界区,而非重量级的互斥对象。 3. 使用适当的等待...
除了创建事件,文档还提到了使用OpenEvent函数根据事件名称获取事件句柄,以及SetEvent和ResetEvent函数用于触发和重置事件状态。最后,文档强调了使用CloseHandle函数来清理和销毁事件对象,因为事件是内核对象。 ...
例如,事件对象的使用可能涉及到一个父进程创建一个命名事件,子进程通过OpenEvent()打开并SetEvent()设置状态,以此通知父进程可以继续执行。而互斥体的应用则会展示如何在一个进程中保护共享资源,确保只有一个...
创建互斥体使用CreateMutex,获取和释放使用WaitForSingleObject和ReleaseMutex。互斥体具有命名特性,可以跨进程同步。 实验"并发与调度"旨在让学生深入了解Windows Server 2003的线程同步机制。实验内容包括使用...
#### OpenEvent 用于打开一个已存在的事件对象。可以设置事件为signaled或nonsignaled状态,这对于线程同步非常关键。 #### CreateWaitableTimer 创建一个可等待的计时器对象。这种对象允许设置一个计时器,当时间...
- **步骤2**: 子进程使用`OpenEvent()`API打开事件对象。 - **步骤3**: 完成任务后,子进程使用`SetEvent()`API将事件设置为信号状态。 2. **互斥信号量示例** 使用互斥信号量来控制对共享资源的访问。当一个...
避免不必要的系统调用,使用适当的数据结构存储和查找线程信息,以及合理地安排UI更新都是需要注意的方面。 8. **错误处理**:在实现过程中,必须对可能出现的错误进行妥善处理,如API调用失败、权限不足等问题,...
这里通过`OpenEvent`尝试打开一个已经存在的事件对象,如果该事件不存在,则使用`CreateEvent`创建一个新的事件。这样做的目的是为了确保在整个程序运行期间只有一个实例在执行,即实现了单例模式。 ### 二、初始化...
因此,子进程可以通过`OpenProcess`和`OpenEvent`函数打开并使用这些继承的句柄,前提是这些句柄在创建子进程时被设置为可继承。在子进程中,可以使用`WaitForSingleObject`或`WaitForMultipleObjects`函数来等待`...
注意,为了确保进程间的同步和正确性,我们需要处理一些异常情况,比如目标窗口未找到、命名对象无法打开等。此外,还要考虑线程安全问题,尤其是在多线程环境中。 总的来说,Windows下的跨进程通信是一个复杂但...
在清单2-1的程序中,`CreateEvent()`函数用于创建事件对象,而`OpenEvent()`用于打开已存在的事件。初始信号状态可以通过`CreateEvent()`的参数设定,通常默认为未设置(FALSE),表示事件尚未发生。当需要触发事件...
猫鼬事件开放 一个处理打开事件的猫鼬事件处理程序目录安装npm install mongoose - events - open用法基本的var openEvent = require ( 'mongoose-events-open' )var dbdb = mongoose . connectiondb . on ( 'open' ...
总的来说,Java版仿真记事本项目展示了Java在桌面应用程序开发中的应用,涵盖了文件I/O、GUI设计、事件处理、字符串操作等多个核心知识点。通过学习和分析这个项目,开发者可以深入理解Java编程的各个方面,并提升...
Nginx 是一个流行的开源 Web 服务器软件,然而在实际使用中经常会遇到各种错误,影响服务器的稳定运行。下面将介绍 Nginx 中的一些常见错误及解决方法。 一、Nginx 启动错误 在安装 Nginx 时,可能会遇到启动错误...
在Java记事本的实现中,主要涉及以下几个关键知识点: 1. **Swing或JavaFX**:这两个是Java提供的用于创建桌面应用的GUI库。Swing是早期的选择,提供了丰富的组件和自定义能力;而JavaFX则相对较新,具有更好的视觉...
总的来说,"易语言禁止重运行"是一个关于程序控制和多线程同步的重要知识点,它涉及到易语言对底层操作系统资源的管理和利用,对于理解和提升易语言编程能力具有重要意义。通过实践和学习此类代码,开发者不仅可以...
- `OpenEvent`:打开一个已经存在的事件对象。 - `SetEvent`:将事件设置为有信号状态。 - `PulseEvent`:将事件设置为有信号状态,并立即清除。 - `ResetEvent`:将事件设置为无信号状态。 **示例代码:** ```cpp...