handle 订阅
HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。更具体的可查找MSDN。包含在winnt.h头文件中。 展开全文
HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。更具体的可查找MSDN。包含在winnt.h头文件中。
信息
适    用
Windows操作系统
意    义
句柄
中文名
handle
应    用
用来表示对象
handle介绍
在windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为他们分配内存,并返回标示这些资源的标示号,即句柄 [1]  。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源 [2]  。其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<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()对进程的互斥。建立互斥体,用来同步。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
收起全文
精华内容
下载资源
问答
  • handle

    2017-09-06 10:53:57
    Handle A handle is a part of, or attachment to, an object that can be moved or used by hand. The design of each type of handle involves substantial ergonomic issues, even where these are dealt with

    A handle is a part of, or attachment to, an object that can be moved or used by hand. The design of each type of handle involves substantial ergonomic issues, even where these are dealt with intuitively or by following tradition. Handles for tools are an important part of their function, enabling the user to exploit the tools to maximum effect.

        以上是维基百科对handle的英文解释,由此,被翻译成“句柄”的计算机术语,它的大概含义也就明白了,通俗的翻译是编号。



    句柄是一种不透明指针,通常用来对用户隐藏数据结构实现,这样可以防止用户任意修改数据对象的内容,所有操作必须通过相应API进行,这是一种OOP中常见的概念,即信息隐藏(封装),好处是实现者可以随意修改数据结构实现也不用影响客户代码。比如Win32上有个叫HANDLE的类型,其定义成类型void*这种不透明指针,用户无从知道具体对应的结构体。

    就像vbtrazz所说,也可以是资源编号,任何可以唯一标识一个对象的东西都可以说是句柄,好处上面已经提及。

    以上转自百度知道

    展开全文
  • 初识handle

    2019-09-05 09:44:30
    handle 是用于分配,管理互联网中数字对象,其它标识符的综合系统。他包含一套开源的自有协议,标识占位以及协议的实现。handle 协议为在分布式计算系统中,存储数字资源,解析访问数据资源的必要信息。这些信息可以...

    简介

    handle 是用于分配,管理互联网中数字对象,其它标识符的综合系统。他包含一套开源的自有协议,标识占位以及协议的实现。handle 协议为在分布式计算系统中,用于存储数字资源的标识符并将其解析为查找和访问资源所需的信息

    • handle是一个协议,类比DNS
    • handle server是协议的具体实现,类比Bind
    • handle用于定位具体的标识,类比域名解析到ip

    语法

    格式如下:
    Handle = Prefix + “/” + Handle Local Name
    例子:
    10/abc
    10 就是前缀-Prefix
    abc就是后缀-Handle Local Name

    • 为了防止字符编码冲突,协议规定使用UTF-8编码

    网络架构

    网络架构

    • GHR(Global handle registry):顶级注册服务
    • LHS(Local handle server): 本地注册服务
    • handle 的网络架构为两层架构,根服务为GHR
    • 每个LHS管理自己的前缀以及存储标识记录
    • 通常的解析流程:到根服务下面获取前缀(0.NA/PREFIX)的HS_SITE信息,它存储了LHS的地址信息,从LHS中获得标识信息

    个人拙见

    • handle与DNS功能类型,将标识解析到某一数字对象
    • 最终解析的数据,可能为具体的资源,也可能为资源的存储地址
      • 例如:bind将域名解析为某ipv4地址,但是该ipv4地址并非具体资源,具体资源存储在该ipv4地址的服务器上,服务器上内容的更改,不影响域名与该ipv4的绑定关系
      • handle最终标识的内容,可以为遵循handle协议的文本,也可以是具体的资源地址(URL)

    解析流程对比DNS

    在这里插入图片描述
    在这里插入图片描述

    参考链接

    http://www.handle.net/tech_manual/HN_Tech_Manual_9.pdf

    展开全文
  • handle实现异步任务和handle原理解析

    千次阅读 2021-04-16 15:12:14
    handle 我理解的意思就是消息传递器,他可以实现更新ui和阻塞线程,发送消息等等,我注释掉的代码是异步任务处理,没注释的是利用handle控制ui的自增。 package com.example.handel; import android.os.Bundle; ...

    handle 我理解的意思就是消息传递器,他可以实现更新ui和阻塞线程,发送消息等等,我注释掉的代码是异步任务处理,没注释的是利用handle控制ui的自增实现数字自增长和充电效果。

    package com.example.handel;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.View;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
        public static final String TAG = "MainActivity";
        private TextView text;
        final static int Test = 1;
        private TextView tvtext;
        private int count = 0;
        ProgressBar progressBar = null;
        Handler handler = new Handler();
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            text = findViewById(R.id.hello);
    //        new ActivityThread().start();
    
            findViewById(R.id.start).setOnClickListener(this);
            findViewById(R.id.stop).setOnClickListener(this);
            findViewById(R.id.prgsta).setOnClickListener(this);
            findViewById(R.id.prgstop).setOnClickListener(this);
            progressBar = findViewById(R.id.prg);
            tvtext = findViewById(R.id.tvcount);
        }
    //    Handler handler = new Handler(){
    //        public void handleMessage(Message message){
    //            switch (message.what){
    //                case Test:
    //                    text.setText("工作线程");
    //                    break;
    //            }
    //        }
    //    };
    
        Runnable mRunCount = new Runnable() {
            @Override
            public void run() {
                tvtext.setText("count:"+String.valueOf(++count));
                handler.postDelayed(mRunCount,1000);
            }
        };
    
        Handler prgHandler = new Handler(){
            public void handleMessage(Message message) {
                Log.d("消息内容为",""+message.arg1);
                progressBar.setProgress(message.arg1);
                prgHandler.post(PrgThread);
                if (message.arg1 >=100) {
                    removeCallbacks(PrgThread);
                }
            }
        };
        public void log(String str) {
            Log.d(TAG,str);
            }
    
        Runnable PrgThread = new Runnable() {
            int i =0;
            @Override
            public void run() {
                i=i+10;
                Message msg = prgHandler.obtainMessage();
                msg.arg1 = i;
                try {
                    Thread.sleep(1000);
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                prgHandler.sendMessage(msg);
            }
        };
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.start:
                    handler.postDelayed(mRunCount,1000);
                    break;
    
                case R.id.stop:
                    handler.removeCallbacks(mRunCount);
                    break;
                case R.id.prgsta:
                    prgHandler.post(PrgThread);
                    break;
                case R.id.prgstop:
                    prgHandler.removeCallbacks(PrgThread);
                    break;
            }
        }
    
    //    class ActivityThread extends Thread{
    //        public void run(){
    //            try {
    //                Thread.sleep(3000);
    //            } catch (InterruptedException e) {
    //                e.printStackTrace();
    //            }
    //            Message message = new Message();
    //            message.what = 1;
    //            handler.sendMessage(message);
    //        }
    //
    //
    //
    //    }
    }
    

    在这里插入图片描述

    展开全文
  • Connection Handle

    2015-07-02 16:06:36
    Connection Handle
    typedef struct
    {
      osal_event_hdr_t  hdr;     //!< GAP_MSG_EVENT and status
      uint8 opcode;              //!< GAP_LINK_ESTABLISHED_EVENT
      uint8 devAddrType;         //!< Device address type: @ref GAP_ADDR_TYPE_DEFINES
      uint8 devAddr[B_ADDR_LEN]; //!< Device address of link
      uint16 connectionHandle;   //!< Connection Handle from controller used to ref the device
      uint16 connInterval;       //!< Connection Interval
      uint16 connLatency;        //!< Conenction Latency
      uint16 connTimeout;        //!< Connection Timeout
      uint8 clockAccuracy;       //!< Clock Accuracy
    } gapEstLinkReqEvent_t;

    simpleBLECentralEventCB

    1、获取 Connection Handle

    case GAP_LINK_ESTABLISHED_EVENT:
          {
            if ( pEvent->gap.hdr.status == SUCCESS )
            {          
              simpleBLEState = BLE_STATE_CONNECTED;
              simpleBLEConnHandle = pEvent->linkCmpl.connectionHandle;
              simpleBLEProcedureInProgress = TRUE;    
    
              // If service discovery not performed initiate service discovery
              if ( simpleBLECharHdl == 0 )
              {
                osal_start_timerEx( simpleBLETaskId, START_DISCOVERY_EVT, DEFAULT_SVC_DISCOVERY_DELAY );
              }
    
              LCD_WRITE_STRING( "Connected", HAL_LCD_LINE_1 );
              LCD_WRITE_STRING( bdAddr2Str( pEvent->linkCmpl.devAddr ), HAL_LCD_LINE_2 );   
            }
            else
            {
              simpleBLEState = BLE_STATE_IDLE;
              simpleBLEConnHandle = GAP_CONNHANDLE_INIT;
              simpleBLERssi = FALSE;
              simpleBLEDiscState = BLE_DISC_STATE_IDLE;
    
              LCD_WRITE_STRING( "Connect Failed", HAL_LCD_LINE_1 );
              LCD_WRITE_STRING_VALUE( "Reason:", pEvent->gap.hdr.status, 10, HAL_LCD_LINE_2 );
            }
          }
          break;

    2、获取 Connection Handle

    //!< Connection Handle. Read Only. Size is uint16.
    #define GAPROLE_CONNHANDLE          0x30E 
    //eg: 
    GAPRole_GetParameter( GAPROLE_CONNHANDLE, &gapConnHandle );
    展开全文
  • 2021-05-17 00:00:13.698656: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED 2021-05-17 00:00:13.699083: E tensorflow/stream_executor/cuda/...
  • Handle初解,看完你就懂了handle

    千次阅读 2020-12-03 19:55:42
    文章目录前言一、Handle是什么?二、Handle有啥用呢?1.传递消息到ui线程2.代码示例3注意点最后 前言 提示:看完本篇,你可以了解到Handle的相关知识与常见的误区提醒 一、Handle是什么? 我们查看一下谷歌官方对...
  • 微信小程序:Component "页面路径" does not have a method " 方法名" to handle event "tap".
  • Handle全解析

    千次阅读 2019-09-26 21:20:31
    Handle是什么? handle是一个异步类能够再完成定时任务和处理线程与线程之间的通信 为什么要使用Handle? Ui线程就是不安全的 为了效率,不能再其他线程里去更新ui线程 Handle/Looper/MessageQueue/Message分别是...
  • 输出: ...因此CloseHandle后不能用 if ( handle ) void handle_null_test() {   HANDLE hevent = CreateEvent(NULL, FALSE, FALSE, L"xx");
  • Android Handle用法

    千次阅读 2018-08-23 09:55:46
    可以使用Handle来在实现在工作线程中更新UI。 Handle使用方法 先声明一个Handle对象,并初始化。 // 声明Handle对象,并初始化 private Handler handler = new Handler(){ @Override public void ha...
  • Java Handle String

    千次阅读 2013-08-07 09:37:11
    Java Handle String
  • JSON-handle

    2019-09-04 11:58:22
    1.JSON-handle(推荐) 这是我非常喜欢的一款插件,我们使用这个插件的目的就是把json数据美化,提高可阅读性,这款插件的配色等非常精美,复制数据也是很方便的,看看效果图: 我们还可以进入选项中设置更多东西...
  • C++HANDLE的理解

    千次阅读 2020-06-30 21:17:52
    HANDLE:句柄,是WINDOWS用来表示对象的,是一个通用句柄表示。 在WINDOWS程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时为他们分配内存,并返回标示这些资源的标示号,即句柄。 但是如果...
  • Kernel Handle

    千次阅读 2012-03-19 10:32:54
    上周把写的驱动挂上...后来仔细查看代码,原来在驱动中我需要打开system进程,调用ZwOpenProcess的时候需要指定OBJECT_ATTRIBUTES,而这个attributes是需要指定为OBJ_KERNEL_HANDLE才表明这个Handle是Kernel Handle,
  • Vue watch handle

    2019-12-30 19:56:34
    Vue watch handle 方法 监听$route watch 监听路由对象 $route // 监听路由 watch:{ '$route': { handler ({ fullPath }) { // $route对象内部的fullPath this.active = fullPath this.$nextTick(() =>...
  • WinDBG的 !handle 命令可以让你方便调试句柄(handle)。 查看进程内所有句柄, 输入命令行 0:014> !handle Handle 4 Type Directory Handle 8 Type Process Handle c Type Key Handle 1...
  • Handle机制的主要成员Looper、Handle、Message介绍
  • Java handle Exceptions

    千次阅读 2013-06-26 08:18:27
    Java handle Exceptions You usually code at least one catch block immediately following a try block. A catch block is a segment of code that can handle an exception that might be thrown by the try blo
  • Invalid handle returned

    万次阅读 2017-11-17 17:32:52
    我是php7 win10 之前是按我的这个文章配置的laravel sqlserver ...但是有时候总报这个错 Invalid handle returned,有时候又没事,这让我很头疼 后来百度谷歌,说是扩展还是驱动(我这
  • json-handle使用

    千次阅读 2018-06-29 12:05:52
    JSON-handle 下载chrome添加json-handle插件后打开json文件没有对其渲染,是因为安装插件后需要设置一下:
  • Handle本地调试及基础开发 文章目录Handle本地调试及基础开发1.前言2.Handle的介绍3.Handle环境搭建&解析3.1环境3.2搭建步骤问题解决3.3Global解析3.4本地解析4.Handle的基础开发--解析Global及本地Handle值4.1...
  • handle_call是同步调用,肯定不能call, handle—— handle_info 和handle_call里调用call 会超时
  • 文章目录报错堆栈信息如下定位...[2019-09-30 11:19:00,756: ERROR/ForkPoolWorker-85] Thread 'ResultHandler' crashed: OSError('handle is closed',) Traceback (most recent call last): File "/usr/lib/pyth...
  • C 语言句柄handle

    万次阅读 多人点赞 2016-10-05 11:58:07
    我觉得自己对于指针理解比较透彻了,但关于句柄的理解,就容易犯理解成指针的错误....2,当HANDLE handle;声明句柄时,handle是它的标识符吗?如int a;则a就是标识符.  3,既然句柄是一个整型值,那么,它在内存的什
  • Android-Handle详解

    千次阅读 2017-02-10 17:01:31
    转载请标明出处:1.handle是什么?handle是android提供用来更新UI的一套机制,也是一套信息处理机制,可以发送消息,也可以通过它处理消息。 2.handle用法注意:其中Runnable是在UI线程中调用的方法。 (1)handle....
  • jsonhandle的使用

    千次阅读 2019-11-25 11:22:06
    1.下载地址 http://jsonhandle.sinaapp.com/ 2.安装 打开:chrome://extensions/ 将上面下载的插件拖入扩展程序中 3.使用 即可出现json提取表达式
  • 打开/创建一个HANDLE而忘记close的情况时有发生。利用RAII的思想,将HANDLE封装为一个类,在其析构函数中进行close,是一个不错 的方法。 ATL提供了一个CHandle类,但是提出了以下使用注意事项: Some API ...
  • handle的用法

    2013-08-14 11:29:38
    一个activity是一个线程,,那么下载文件时间长和处理大量的...Handle handle=new Handle(); Runnable updateThread=new Runnable(){  public void run(){ handle.postDelayed(updateThread,3000) }} 在oncli
  • tensorflow编程: Tensor Handle Operations

    千次阅读 2017-10-05 10:09:22
    Tensor Handle Operationstf.get_session_handle返回句柄data 。import tensorflow as tfa = tf.constant(10) b = tf.constant(20) c = tf.multiply(a, b) h = tf.get_session_handle(c) sess = tf....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,202
精华内容 80,080
关键字:

handle