- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我实现了一个类,该类实现了一个返回 HANDLE
的 API。假设我的类(class)是 HANDLE
的所有者并负责创建、更新和关闭它。
如何防止我的 API 调用者关闭我的句柄并破坏我的设计?
CreateToolhelp32Snapshot
是一个昂贵的调用,必须明智地使用。我的解决方案中有很多项目,每个项目都粗心地调用了 CreateToolhelp32Snapshot
。
我想实现一个包装类,它提供对 CreateToolhelp32Snapshot
的“智能”访问。
我的类将是 CreateToolhelp32Snapshot
返回的 HADNLE
的所有者,并将在需要时更新它(重新调用 CreateToolhelp32Snapshot
)(不是但完全定义何时需要)。
为了简单起见,我们假设我的应用程序是单个进程和线程,并且我的类只有一个实例。
最佳答案
Say I implement a class that implements an API that returns a HANDLE
您退回 handle 破坏了您的设计。您的包装器的用户不应该关心句柄,而是关心他们想要的数据,例如您案例中的模块列表。公开一个可以将此类数据返回给您的用户的 API。
class snapshot
{
public:
snapshot()
{
m_handle = CreateToolhelp32Snapshot(...);
}
~snapshot()
{
CloseHandle(m_handle);
}
getModules()
{
// use m_handle to return a list of modules.
}
private:
HANDLE m_handle;
};
关于c++ - 如何确保并强制拥有句柄以防止不需要的 CloseHandle 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52697893/
我有一些(更多)关于调用 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
我是一名优秀的程序员,十分优秀!