草庐IT

closeHandler

全部标签

c++ - 如何从 CloseHandle() 捕获异常

根据MSDN规范,CloseHandle在调试器下运行时,如果传递给它的句柄无效,则会引发异常。因为我想要干净的代码,所以我插入了一些代码来捕捉它。但是,它不起作用,异常未被捕获。#include#include#include/*omittedcode*/CloseHandle(myHandle);//closethehandle,thehandleisnowinvalidtry{success=CloseHandle(myHandle);}catch(std::exception&e){_tprintf(TEXT("%s\n"),e.what());}catch(...){_tpr

windows - 有没有办法确定命名对象的 CloseHandle() 是否是最后一个?

在Windows中创建命名对象时,可以通过调用GetLastError()并检查ERROR_ALREADY_EXISTS来查明该对象是否已经存在。有没有办法提出双重问题:我的CloseHandle()是最后一个关闭(句柄)命名资源的吗? 最佳答案 不,kernelhandlesaren'treference-counted.当您调用CloseHandle时,会关闭句柄。 关于windows-有没有办法确定命名对象的CloseHandle()是否是最后一个?,我们在StackOverflo

c# - 为什么 .NET 4 和 3.5 对 CloseHandle 异常的处理不同?

我遇到这样一种情况,当在调试器下运行时,对CloseHandle的PInvoke调用在.NET4应用程序中抛出SEHException。不像otherswhohaveencounteredsimilarissuesmigratingfrom3.5to4,我并没有被这种行为特别困扰,并且已经找到了问题所在(第三方库在同一个句柄上两次调用CloseHandle)。但是,我很困惑为什么这种行为不会发生在.NET3.5应用程序中。以下小而完整的示例演示了我遇到的行为(在XPSP3和Win7x64上测试,始终编译为x86):classProgram{staticvoidMain(string[]

c# - 为什么 .NET 4 和 3.5 对 CloseHandle 异常的处理不同?

我遇到这样一种情况,当在调试器下运行时,对CloseHandle的PInvoke调用在.NET4应用程序中抛出SEHException。不像otherswhohaveencounteredsimilarissuesmigratingfrom3.5to4,我并没有被这种行为特别困扰,并且已经找到了问题所在(第三方库在同一个句柄上两次调用CloseHandle)。但是,我很困惑为什么这种行为不会发生在.NET3.5应用程序中。以下小而完整的示例演示了我遇到的行为(在XPSP3和Win7x64上测试,始终编译为x86):classProgram{staticvoidMain(string[]

go - 为什么超时直接关闭连接而不调用closeHandler方法?

为什么超时直接关闭连接而不调用closeHandler方法?ws.SetCloseHandler(func(codeint,textstring)error{fmt.Println("socketclose")}//cannotget"socketclose"stdout:"websocket:close1006(abnormalclosure):unexpectedEOF"包:“github.com/gorilla/websocket” 最佳答案 websocketRFC这是关于状态1006的:1006isareservedval

go - 为什么超时直接关闭连接而不调用closeHandler方法?

为什么超时直接关闭连接而不调用closeHandler方法?ws.SetCloseHandler(func(codeint,textstring)error{fmt.Println("socketclose")}//cannotget"socketclose"stdout:"websocket:close1006(abnormalclosure):unexpectedEOF"包:“github.com/gorilla/websocket” 最佳答案 websocketRFC这是关于状态1006的:1006isareservedval

c++ - 为什么 RegCloseKey 存在(当 CloseHandle 似乎执行相同的功能时)?

我正在查看DuplicateHandle的文档前几天注意到DuplicateHandle能够复制注册表项句柄(HKEYs)。在SysInternals书中多读一点似乎表明注册表项句柄是普通的内核对象,类似于文件句柄。然而CloseHandle无法关闭HKEY和RegCloseKey不能关闭其他种类的内核对象。为什么要区分? 最佳答案 这是因为只有注册表的一部分功能是在内核中实现的。它包括使用本地注册表项的基本操作(创建、删除、读取、写入等)。其余功能在advapi32.dll中实现,工作在用户态:使用RegConnectRegist

c++ - 为什么 RegCloseKey 存在(当 CloseHandle 似乎执行相同的功能时)?

我正在查看DuplicateHandle的文档前几天注意到DuplicateHandle能够复制注册表项句柄(HKEYs)。在SysInternals书中多读一点似乎表明注册表项句柄是普通的内核对象,类似于文件句柄。然而CloseHandle无法关闭HKEY和RegCloseKey不能关闭其他种类的内核对象。为什么要区分? 最佳答案 这是因为只有注册表的一部分功能是在内核中实现的。它包括使用本地注册表项的基本操作(创建、删除、读取、写入等)。其余功能在advapi32.dll中实现,工作在用户态:使用RegConnectRegist

c++ - 使用 C++11 std::thread native_handle 以及我是否需要 CloseHandle

我开始练习使用C++11std::thread。通常,对于Win32,只要我有线程句柄,我就需要调用CloseHandle。当我使用C++11native_handle时,是否仍需要调用CloseHandle?另外,如果我不使用C++11native句柄,线程句柄是否得到正确清理? 最佳答案 当然不是。线程对象有一个析构函数,它释放对象可能获取的任何操作系统特定资源。实际上,每个(好的)C++对象都有一个析构函数,可以清除需要清理的所有内容,并且这个析构函数(当代码编写正确时)由程序自动调用。这个习语被称为RAII-每个对象都有一个

c++ - 是否需要调用 CloseHandle?

我正在阅读http://support.microsoft.com/kb/243953他们在其中解释了如何将应用程序限制为单个实例。互斥锁在构建和销毁时创建,它们调用CloseHandle。这让我开始思考,即使应用程序将关闭,是否也严格要求调用CloseHandle?在许多freebsdc程序中,经常使用不释放malloced内存的做法,因为操作系统会在销毁时更快地清理它。即使进程已关闭,也无法调用CloseHandle占用操作系统中的资源? 最佳答案 CouldnotcallingCloseHandletieupresources