CreateEvent进程同步
2020-04-19 16:01:07来源:博客园 阅读 ()
CreateEvent进程同步
CreateEvent进程间同步
??CreateEvent可以创建或是打开一个命名或是未命名的event对象。
HANDLE CreateEvent(
??LPSECURITY_ATTRIBUTES lpEventAttributes, // pointer to security attributes
??BOOL bManualReset, // flag for manual-reset event
??BOOL bInitialState, // flag for initial state
??LPCTSTR lpName // pointer to event-object name
);
??LPSECURITY_ATTRIBUTES结构体用于创建对象的访问控制属性的,为NULL
的话则使用默认的安全描述符,并且对象可被子进程继承。
??bManualReset参数为TRUE
时,被创建对象需要手动调用ResetEvent
函数恢复为__非信号态__(即不可响应);如果为FALSE
,event对象在响应等待线程后自动恢复成非信号态。
??bInitialState参数为TRUE
时,被创建的对象初始状态为__信号态__(可响应);否则为非信号态。
??lpName参数为event对象名,长度不超过MAX_PATH,字符敏感;如果为NULL,则创建未命名对象。
??现在测试一下如何实现进程间同步。
#include "stdio.h"
#include "Windows.h"
int main() {
HANDLE hEvtObj = NULL;
DWORD hRet = NULL;
CHAR objName[] = { "ObjTestEvt_123" };
if (hEvtObj = CreateEventA(
NULL,
TRUE, // 手动重置为非信号态
FALSE, // 初始不可响应
objName))
{
if (ERROR_ALREADY_EXISTS == GetLastError()) { // 事件对象已存在
printf("Event Obj \"%s\" has EXISTED ...\n", objName);
for (int i = 0; i < 10;) { // 响应10次
hRet = WaitForSingleObject(hEvtObj, 300); // 超时时间为0.3秒
if (!hRet) {
printf("\"%s\" is now SIGNALED %d\n", objName, i++); // 信号态
}
else {
if (WAIT_TIMEOUT == hRet)
printf("\"%s\" is now NONSIGNALED\n", objName); // 非信号态
else
printf("Wait Error %#x...\n", GetLastError());
}
Sleep(1000); // 休眠一秒
}
}
else { // 成功创建事件对象
printf("Create Evt Obj \"%s\" Successful\n", objName);
Sleep(1000); // 等待同步进程运行
printf("Set Event \"%s\" To SIGNALED for 4 seconds...\n", objName);
SetEvent(hEvtObj); // 设置为事件对象为信号态
Sleep(4000); // 休眠4s
printf("Reset Event \"%s\" To NONSIGNALED for 4 seconds...\n", objName);
ResetEvent(hEvtObj); // 设置为非信号态
Sleep(4000); // 让事件对象处于非信号态4s
printf("Set Event \"%s\" To SIGNALED...\n", objName);
SetEvent(hEvtObj); //
}
CloseHandle(hEvtObj);
hEvtObj = NULL;
}
else { // 创建失败
printf("CreateEvent Error = %#x", GetLastError());
}
return 0;
}
??除了进程间,线程也可使用这种方式。
??参考:CreateEvent
原文链接:https://www.cnblogs.com/zUotTe0/p/12732594.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 进程和匿名管道使用学习 2020-01-14
- linux与Windows进程控制 2019-11-22
- c++ pipe实现父子进程通信 2019-10-25
- C++屌屌的观察者模式-同步回调和异步回调 2019-08-16
- 多进程界面开发-Qt试玩儿 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash