网站地图
hnsjyk999.com
三九百科 包罗万象
handle(Windows操作系统中的一个概念) 发布于:

HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。更具体的可查找MSDN。包含在winnt.h头文件中。

在windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为他们分配内存,并返回标示这些资源的标示号,即句柄 。

句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。

由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源 。

其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<100)。由此就可以看出句柄的性质了。

无效的返回值为: INVALID_HANDLE_VALUE

编程时可作调试用:

HANDLE:句柄,是windows用来表示对象的(不是C++的对象),HWND是其中一种。

HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。

Windows API函数,该函数再主线程的基础上创建一个新线程。

WaitForMultipleObjects:几乎可以等待Windows中的所有的内核对象。

原型:

WaitForSingleObject的返回值能够指明调用线程为什么再次变为可调度状态。如果线程等待的对象变为已通知状态,那么返回值是 WAIT_OBJECT_0。如果设置的超时已经到期,则返回值是WAIT_TIMEOUT。如果将一个错误的值(如一个无效句柄)传递给 WaitForSingleObject,那么返回值将是WAIT_FAILED(若要了解详细信息,可调用GetLastError)

nCount参数用于指明想要让函数查看的内核对象的数量。这个值必须在1与MAXIMUM_WAIT_OBJECTS(在Windows头文件中定义为64)之间。lpHandles参数是指向内核对象句柄的数组的指针。

可以以两种不同的方式来使用WaitForMultipleObjects函数:

一种方式是让线程进入等待状态,直到指定内核对象中的任何一个变为已通知状态。

另一种方式是让线程进入等待状态,直到所有指定的内核对象都变为已通知状态。bWaitAll参数告诉该函数,你想要让它使用何种方式。如果为该参数传递TRUE,那么在所有对象变为已通知状态之前,该函数将不允许调用线程运行。

WaitForMultipleObjects函数的返回值告诉调用线程,为 什么它会被重新调度。可能的返回值是WAIT_FAILED和WAIT_TIMEOUT,这两个值的作用是很清楚的。如果fWaitAll参数传递 TRUE,同时所有对象均变为已通知状态,那么返回值是WAIT_OBJECT_0。

如果为fWaitAll传递FALSE,那么一旦任何一个对象变为已 通知状态,该函数便返回。在这种情况下,你可能想要知道哪个对象变为已通知状态。返回值是WAIT_OBJECT_0 与(WAIT_OBJECT_0 +dwCount-1)之间的一个值。换句话说,如果返回值不是WAIT_TIMEOUT,也不是WAIT_FAILED,那么应该从返回值中减去 WAIT_OBJECT_0。产生的数字是作为第二个参数传递给WaitForMultipleObjects的句柄数组中的索引。该索引说明哪个对象变 为已通知状态。

dwMilliseconds参数的作用与它在WaitForSingleObject中的作用完全相同。如果在等待的时候规定的时间到了,那么该函数无论如何都会返回。同样,通常为该参数传递INFINITE,但是在编写代码时应该小心,以避免出现死锁情况。

有两个参数,分别是THandle和Timeout(毫秒单位),hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。

WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码

它可以等待如下几种类型的对象:

Event,Mutex,Semaphore,Process,Thread

有三种返回类型:

WAIT_OBJECT_0, 表示等待的对象有信号(对线程来说,表示执行结束);

WAIT_TIMEOUT, 表示等待指定时间内,对象一直没有信号(线程没执行完);

WAIT_ABANDONED 表示对象有信号,但还是不能执行 一般是因为未获取到锁或其他原因

作用是找出当前系统是否存在指定进程的实例。如果没有则创建一个互斥体。

CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为:

如果函数成功执行,将返回一个互斥量对象的句柄。如果在CreateMutex()执行前已经存在有相同名字的互斥量,函数将返回这个已经存在互斥量的句柄,并且可以通过GetLastError()得到错误代码ERROR_ALREADY_EXIST。可见,通过对错误代码ERROR_ALREADY_EXIST的检测可以实现CreateMutex()对进程的互斥。

建立互斥体,用来同步。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。

在窗口对象是一个对象的C++CWnd类 (或派生的类) 的应用程序直接创建。它出现,并转到应用程序的构造函数和析构函数调用的响应中。Windows窗口后,就是内部 Windows 数据结构,它对应的窗口,并会占用系统资源时存在一个不透明句柄。Windows 窗口由"窗口句柄"(HWND),并创建后CWnd对象创建通过调用Create类的成员函数CWnd。通过程序调用或用户的操作,可能会销毁窗口。窗口对象中存储的窗口句柄m_hWnd成员变量。下图显示了之间的关系C++窗口对象和 Windows 窗口。在讨论创建 windows创建 Windows。中介绍了销毁窗口销毁窗口对象。

HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源。

其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<100)。由此就可以看出句柄的性质了。

无效的返回值为: INVALID_HANDLE_VALUE

HWND一般是用来定义窗口句柄的。HANDLE是用来定义任何类型的句柄,(Handletoanobject).包括HWND。可以理解为HWND是HANDLE的一个特例,用来表示一个窗口。


相关文章推荐:
句柄 | Windows | MSDN | 句柄 | 对象 | Windows | 操作系统 | 唯一索引 | 指针 | 地址空间 | 信号量 | 线程 | 句柄 | 互斥量 |