事件对象,同一程序,打开2个实例,资源释放的问题.
g_hEvent = CreateEvent(NULL, FALSE, FALSE, "instance");
if(NULL != g_hEvent)
{
// 如果先前有一个实例, 结束此实例
if(ERROR_ALREADY_EXISTS == GetLastError())
{
cout << "Only instance can run!" << endl;
CloseHandle(g_hEvent); // 问题就在这里
return 0;
}
}
SetEvent(g_hEvent); // set event signaled
上段代码中CloseHandle(g_hEvent);是否可以?照msdn所说:If the named event object existed before the function call, the function returns a handle to the existing object,也就是运行第二个实例的时候,g_hEvent的值就是先前存在的对象句柄(这两个实例的句柄有什么关系?是否是同一个?),那么这里调用CloseHandle(g_hEvent);是不是将先前的事件句柄给关闭了.
比如程序为1.exe,那么我先后两次运行1.exe,产生2个实例,第二个实例运行时,会运行CloseHandle(g_hEvent),这个是不是将第一次运行打开的g_hEvent给关闭了?还是两个实例都有各自的g_hEvent,互不相关?
if(NULL != g_hEvent)
{
// 如果先前有一个实例, 结束此实例
if(ERROR_ALREADY_EXISTS == GetLastError())
{
cout << "Only instance can run!" << endl;
CloseHandle(g_hEvent); // 问题就在这里
return 0;
}
}
SetEvent(g_hEvent); // set event signaled
上段代码中CloseHandle(g_hEvent);是否可以?照msdn所说:If the named event object existed before the function call, the function returns a handle to the existing object,也就是运行第二个实例的时候,g_hEvent的值就是先前存在的对象句柄(这两个实例的句柄有什么关系?是否是同一个?),那么这里调用CloseHandle(g_hEvent);是不是将先前的事件句柄给关闭了.
比如程序为1.exe,那么我先后两次运行1.exe,产生2个实例,第二个实例运行时,会运行CloseHandle(g_hEvent),这个是不是将第一次运行打开的g_hEvent给关闭了?还是两个实例都有各自的g_hEvent,互不相关?
...全文
相关推荐
vb6禁止程序重复打开的方法
vb6 禁止程序重复打开的方法,包含完整的工程代码。
防止软件打开多个
防止软件打开多个
swt资源释放问题
swt资源释放问题,详细介绍swt如何释放屏幕资源
未将对象引用设置到对象的实例--可能出现的问题总结
1、ViewState 对象为Null。 2、DateSet 空。 3、sql语句或Datebase的原因导致DataReader空。 4、声明字符串变量时未赋空值就应用变量。 5、未用new初始化对象。 6、Session对象为空。 7、对控件赋文本值时,值不存在。 8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。 9、使用FindControl时,控件不存在却没有做预处理。 10、重复定义造成未将对象引用设置到对象的实例错误.
C#资源释放方法实例分析
主要介绍了C#资源释放方法,结合实例详细分析了C#资源释放的具体方法与相关技巧,需要的朋友可以参考下


进程/线程/DLL
