windows编程里HANDLE作用

我接触的handle是在声明一个串口的时候,我发现 HANDLE hSerial这行代码,我很疑惑,一般Qt里声明一个对象使用具体类型的,比如QSeialPort serial这个样子,经过研究后发现以下

  1. HANDLE其实就是一个万能的通用类型,你可以用它声明任何变量,但是具体后续做什么取决于后续这个变量被存放什么资源
HANDLE hFile = CreateFile(...);
HANDLE hProcess = OpenProcess(...);
HANDLE hThread = CreateThread(...);
HANDLE hEvent = CreateEvent(...);

windows这样设计就是可以提供一个统一的接口来处理不同类型的资源,从而简化编程模型。

  1. 假如在头文件中声明一个 HANDLE 类型的变量(比如 HANDLE
    hFile;),此时它只是一个未初始化的句柄,没有关联到任何具体的资源。可以将其视为一个占位符,等待后续的初始化和赋值。 当使用
    CreateFile 或其他类似的函数将这个句柄初始化后,它就会关联到特定的资源,比如一个打开的文件。这时,hFile
    变量就“注入了灵魂”,它的值将代表该资源的句柄。
hFile = CreateFile(L"example.txt", GENERIC_READ,
    FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
   

在这个例子中,CreateFile 函数尝试打开名为 “example.txt” 的文件,并将文件的句柄赋值给
hFile。如果函数调用成功,hFile 就包含了指向该文件资源的句柄。
句柄实际上是一个指向内核对象的指针,而不是文件在文件系统中的物理地址。当通过 CreateFile
获得一个文件句柄时,操作系统会为您管理这个文件资源,确保可以通过这个句柄与文件进行交互,无论文件在磁盘上的实际位置如何变化。

即使文件系统进行了一些优化操作,比如移动文件以优化存储空间,句柄仍然有效,因为它指向的是文件的内核对象表示,而不是文件的物理位置。操作系统负责跟踪文件的实际位置,并确保所有的句柄都能正确地访问到文件数据。

  1. 当然,如果文件被删除或者句柄被关闭,那么该句柄就不再有效。在这种情况下,尝试使用该句柄进行操作将会导致错误。因此,在使用句柄时,需要确保它仍然有效,并且在不再需要时正确地关闭句柄,以释放系统资源。关闭句柄通常使用
 CloseHandle(hFile);

这会告诉操作系统您已经完成了对该资源的使用,可以释放与该句柄关联的资源。在关闭句柄后,应该避免再次使用它,因为它已经不再有效。

  1. Handle声明的对象在构造函数里一般被赋值为INVALID_HANDLE_VALUE,表示一个无效句柄。
    关于INVALID_HANDLE_VALUE,可以看看这篇文章:
    INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值