- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我打开了一个共享内存的句柄,我可以读取/写入共享内存。我这样打开 handle :
//Map the shared memory
d_to_mbx_mem_arr[idx] = reinterpret_cast<Byte*>(MapViewOfFile(to_mem_h, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
MAILBOX_SIZE_e));
此处设置的变量是一个 Byte* 数组(Byte 是 unsigned char 的别名),所以我进行了重新解释转换,这样我就可以像标准 Byte 指针一样使用句柄。
后来我尝试通过以下方式释放句柄:
CloseHandle(d_to_mbx_mem_arr[p_tool_id]);
d_to_mbx_mem_arr[p_tool_id] = NULL;
由于在 CloseHandle 之后该值被设置为 NULL,并且调用此方法的代码只是单线程的,所以我知道我只调用了一次。但是,当我调用它时,会收到以下警告:
“FMLib_Comm_Layer.exe 中 0x7c90e4ff (ntdll.dll) 的第一次异常:0xC0000008:指定了无效句柄。”
当我因警告而中断时,我看到它试图关闭的句柄的值为“0x01c90000”,这对我来说对于共享内存指针来说似乎是合理的。有没有人发现这个实现有问题,或者我应该假设我在其他地方搞砸了?
最佳答案
您需要在 to_mem_h
上调用 CloseHandle()
,而不是在 MapViewOfFile()
的返回值上调用(参见使用 的示例code>MapViewOfFile()
here -- 该示例在 MapViewOfFile()
的返回值上调用 UnmapViewOfFile()
并调用 CloseHandle ()
在 MapViewOfFile()
的第一个参数上)
关于c++ - CloseHandle 调用中的句柄异常无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902715/
我有一些(更多)关于调用 CloseHandle 的问题。 所以,the SO citizens have spoken, and you must always close a handle . 问
在我的应用程序中,我打开了一个共享内存的句柄,我可以读取/写入共享内存。我这样打开 handle : //Map the shared memory d_to_mbx_mem_arr[idx
如果句柄被创建为函数参数,它会在函数结束时自行关闭吗? 例如: int readMem(HANDLE processHandle, int address) { int memValue =
我有一个主线程接收需要一些时间的 Action 。所以我创建了一个线程并将工作委托(delegate)给它。主线程在接收作业时调用此执行函数。每个作业都执行此执行。 Return_type execu
我有一个 Class 类,其中有一个成员属性 HANDLE handle 到一个线程(我们可以假设它被设置为 NULL 在那个点)。在某些时候,Class 中的一个方法分派(dispatch)它自己的
我正在阅读 http://support.microsoft.com/kb/243953他们在其中解释了如何将应用程序限制为单个实例。互斥锁在构建和销毁时创建,它们调用 CloseHandle。 这让
我绞尽脑汁想弄清楚串行端口何时完成关闭,以便我可以重新打开它。事实证明,CloseHandle() 在端口实际解锁之前返回。 我正在使用 CreateFile(FILE_FLAG_OVERLAPPED
我需要从上下文菜单启动一个单独的进程/应用程序;我正在使用函数 launch_program 来执行此操作。一旦创建的进程终止,我不关心退出代码,我只希望能够启动它。我的问题是:如果变量 startu
在 CloseHandle() 中关闭其句柄后,进程未终止。 我有一个由 CreateProcess() api 创建的进程。即使在关闭其句柄后,它仍在运行。 在 msdn 中,他们说 CloseHa
我有一个 GWT 应用程序,我想在用户离开应用程序以强制注销并删除任何数据等时运行一些代码。 为此,我使用 CloseHandler 并使用 Window.addCloseHandler 注册它。 我
我编写了一个自己开发的串行端口类,为了简单起见,我使用了阻塞/同步/非重叠。我浏览了所有 MSDN 文档,这对我来说很困难。 我在从端口打开、传输或接收字节方面没有任何问题。所有操作都是同步并且没有线
我只想创建一个线程,然后立即调用 CloseHandle 并让线程自行消亡,这样我就不必在“原始”线程中进行额外的清理工作(清理本身并不难) ,但这意味着我想避免大量额外的簿记)。 MSDN 说在线程
我做了一个简单的例子。 我只想知道在将 handle 重新附加到新进程之前是否需要关闭 handle ? DWORD g_dwPid = 0; HANDLE g_hProcess; int _tWin
这个问题在这里已经有了答案: Serial Comm using WriteFile/ReadFile (4 个答案) 关闭 9 年前。 我想读取串行端口的传入数据并处理它们(Windows: na
我决定使用 Wait Functions (WaitForSingleObject、WaitForMultipleObject 等) 来正确退出线程。在这种情况下,问题是我是否需要显式调用 Close
长话短说 假设我实现了一个类,该类实现了一个返回 HANDLE 的 API。假设我的类(class)是 HANDLE 的所有者并负责创建、更新和关闭它。 如何防止我的 API 调用者关闭我的句柄并破坏
我需要打电话吗 CloseHandle()在 EnumWindows() 返回的句柄上? 最佳答案 您只能在 kernel32 中的函数返回的句柄上使用 CloseHandle()。它们是引用计数的,
事实 1:由于某些客户端限制,我们无法使用异常机制。 事实 2:关闭已经关闭的句柄会引发异常。 不考虑提及事实的原因,将调用 GetHandleInformation() 来检测句柄是否仍然有效,并且
根据 MSDN 规范,CloseHandle 在调试器下运行时,如果传递给它的句柄无效,则会引发异常。 因为我想要干净的代码,所以我插入了一些代码来捕捉它。但是,它不起作用,异常未被捕获。 #incl
在 Windows 中创建命名对象时,可以通过调用 GetLastError() 并检查 ERROR_ALREADY_EXISTS 来查明该对象是否已经存在。 有没有办法提出双重问题:我的 Close
我是一名优秀的程序员,十分优秀!