handle_handler - CSDN
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的用法实例

    千次阅读 2018-07-26 09:11:35
    在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title.首先我们看一下习惯了Java编程的人,在不知道Handler的用法之前是怎么样写的程序,代码如下所示: ... import android.app.Activity;...

    在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title.首先我们看一下习惯了Java编程的人,在不知道Handler的用法之前是怎么样写的程序,代码如下所示:

    package com.android.tutor;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class HandlerDemo extends Activity {
    
        //Title为setTitle方法提供变量,这里为了方便我设置了int型
        private int title = 0;
    
            private Handler mHandler = new Handler() {
    
                public void handlerMessage(Message msg) {
                    switch (msg.what) {
                        case 1:
                            updateTitle();
                            break;
                    }
                }
            };
    
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
    
            Timer timer = new Timer();
            timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
        }
    
        private class MyTask extends TimerTask {
            @Override
            public void run() {
                Message message = new Message();
                message.what = 1;
                mHandler.sendMessage(message);
            }
        }
    
        public void updateTitle() {
    
            setTitle("welcome to Mr Li's blog" + title);
            title ++;
        }
    
    }
    展开全文
  • Handle全解析

    2019-09-26 21:28:22
    Handle是什么? handle是一个异步类能够再完成定时任务和处理线程与线程之间的通信 为什么要使用Handle? Ui线程就是不安全的 为了效率,不能再其他线程里去更新ui线程 Handle/Looper/MessageQueue/Message分别是...

    Handle是什么?

    handle是一个异步类能够再完成定时任务和处理线程与线程之间的通信

    为什么要使用Handle?

    Ui线程就是不安全的 为了效率,不能再其他线程里去更新ui线程

    Handle/Looper/MessageQueue/Message分别是什么?

    在这里插入图片描2
    MessageQueue是一个消息队列,消息是一个一个出来的,Looper就等于发动机,如果出来的是runable就执行run()方法,如果出来的是message就执行handlemessage()方法

    可以用handle.sendmessage()发送消息,然后用handlemessage()方法处理信息

    展开全文
  • C++ Handle(句柄) part1

    千次阅读 2016-08-02 17:44:35
    本文主要讲述了Handle类的概念,定义方法以及写时复制技术。   在前文(Surrogate代理类)的讲解中我们了解到了代理的实现方法. 代理类有很多好处,但是麻烦的是每次都得进行复制.如果该类是经常使用并且...

    本文是我学习C++沉思录第6章的笔记

    本文主要讲述了Handle类的概念,定义方法以及写时复制技术。

     

    在前文(Surrogate代理类)的讲解中我们了解到了代理的实现方法.

    代理类有很多好处,但是麻烦的是每次都得进行复制.如果该类是经常使用并且member很多的话,这样复制的消耗是十分客观的.

    因此这里就要介绍另外一种代理类,Handle,也就是句柄类.

     

    为何使用句柄类?

    首先就是复制问题.前面有谈到,有些类内部数据很多,采用复制消耗非常大,这种情况下就必须采用句柄类来进行操作.

    其次是由于函数的参数和返回值都是采用了复制进行自动传递.虽然c++中引用可以避免,但是很多情况下返回值采用引用并不明智.

    对于采用指针的方式,可以解决问题,但是又会引入调用者对于动态管理内存的麻烦.而这往往是很多错误的根源.

     

    何为句柄类呢?

    句柄类可以理解为采用了引用计数的代理类.

    其多个句柄共享了同一个被代理的类.通过引用计数的方式来减少复制以及内存管理.

    其行为类似指针,因此也有智能指针之称,但其实差别很大.后面会有讲述.

     

    句柄类例子:

    先有一个简单的类Point

    复制代码
     1 class Point
    2 {/*{{{*/
    3 public:
    4 Point():_x(0),_y(0){}
    5 Point(int x,int y):_x(x),_y(y){}
    6 int x()const {return _x;}
    7 void x(int xv) { _x = xv;}
    8 int y()const { return _y;}
    9 void y(int yv) { _y = yv;}
    10 private:
    11 int _x;
    12 int _y;
    13 };/*}}}*/
    复制代码

    接下来我们要定义其的Handle类.

    我们的Handle类:

    复制代码
     1 class Handle
    2 {
    3 public:
    4 Handle():up(new UPoint){}
    5 Handle(int x,int y):up(new UPoint(x,y)){}
    6 Handle(const Point&p):up(new UPoint(p)){}
    7 Handle(const Handle &h);
    8 ~Handle();
    9 Handle& operator=(const Handle &h);
    10 int x() const{ return up->p.x(); }
    11 int y() const{ return up->p.y(); }
    12 Handle& x(int);
    13 Handle& y(int);
    14
    15
    16 private:
    17 UPoint *up;
    18 void allocup();
    19 };
    复制代码

    这里说明我们的Handle和指针的不同之处.

    也许有读者会对Handle有疑问,为什么不采用operator->来直接操作point呢?

    其实顾虑就是operator->返回的是point的地址.也就是使用者可以轻易的获得point的地址进行操作,这并不是我们想要的.这也就是Handle也pointer不想同的地方.

    UPoint是为了采用引用计数定义的数据结构

    复制代码
     1 //all member is private..only assess by Handle
    2 class UPoint
    3 {/*{{{*/
    4 friend class Handle;
    5
    6 Point p;
    7 int u;//count
    8
    9 UPoint():u(0){}
    10 UPoint(const Point&pv):p(pv){}
    11 UPoint(int x,int y):p(x,y),u(1){}
    12 UPoint(const UPoint &up):p(up.p),u(1){}
    13 };/*}}}*/
    复制代码

     

    对于Handle类的操作,我们要在Handle类进行复制的时候,累加Handle指向的UPoint的计数值

    即复制构造函数以及赋值函数

    复制代码
     1 Handle::Handle(const Handle &h)
    2 :up(h.up)
    3 {
    4 ++up->u;
    5 }
    6
    7 Handle& Handle::operator=(const Handle &h)
    8 {
    9 ++h.up->u;
    10 if (--up->u == 0)
    11 delete up;
    12 up = h.up;
    13 return *this;
    14 }
    复制代码

    而对于析构函数,则是减小引用计数,如果减到0了,就说明没有其他的Handle指向了UPoint,因此我们要删除掉.

    1 Handle::~Handle()
    2 {
    3 if (--up->u == 0)
    4 delete up;
    5 }

    剩下的就是定义Handle对于Point的操作了.即Handle::x(int xv)和Handle::(int yv)了.

    这里有2种写法.

    一种是像指针一样,对于赋值,就直接修改指向的Point里面的值.这种方法有一个问题,即所以都指向这个Point的Handle类获取的x值都会变化.

    代码:

    复制代码
     1 //point like
    2 Handle& Handle::x(int xv)
    3 {
    4 up->p.x(xv);
    5 return *this;
    6 }
    7 //point like
    8 Handle& Handle::y(int yv)
    9 {
    10 up->p.y(yv);
    11 return *this;
    12 }
    复制代码

     

    还有一种是写时复制技术,即每次对于共享的Point进行修改的时候都复制一份新的Point,然后进行修改.

    这种技术在Handle中大量采用.在stl中,string也采用了同样的方法.

    其额外开销很小,而效率也不差.

    代码:

    复制代码
     1 void Handle::allocup()
    2 {
    3 if (up->u != 1)
    4 {
    5 --up->u;
    6 up = new UPoint(up->p);
    7 }
    8 }
    9
    10 Handle& Handle::x(int xv)
    11 {
    12 allocup();
    13 up->p.x(xv);
    14 return *this;
    15 }
    16
    17 Handle& Handle::y(int yv)
    18 {
    19 allocup();
    20 up->p.y(yv);
    21 return *this;
    22 }
    复制代码


    至此,Handle类的第一部分就讲完了.

    之后会有第二部分的讲解.解决了多出了一个UPoint的麻烦.

    展开全文
  • C++-------对handle的理解

    万次阅读 2018-08-21 15:56:44
    我觉得自己对于指针理解比较透彻了,但关于句柄的理解,就容易犯理解成指针的错误.  一般说:句柄是资源(或项目)的唯一标识....俺觉得这其实说得很不明白的,现在我想问的是句柄到底是怎么...2,当HANDLE handle;声明句柄...

    转自:https://blog.csdn.net/Godsight/article/details/52738175

    我觉得自己对于指针理解比较透彻了,但关于句柄的理解,就容易犯理解成指针的错误. 
    一般说:句柄是资源(或项目)的唯一标识. 
    俺觉得这其实说得很不明白的,现在我想问的是句柄到底是怎么标识资源的: 
    1,句柄在32位机上是32位整型吗? 
    2,当HANDLE handle;声明句柄时,handle是它的标识符吗?如int a;则a就是标识符. 
    3,既然句柄是一个整型值,那么,它在内存的什么位置呢?栈上吗? 
    4,句柄是通过在它所占内存中记录对象在内存中的首地址来"标识"对象的吗?如果是,那与指针在这方面就完全一样了.

    可能有点玄,大家谈论下吧.

    ---------------------------------------------------------------

    对句柄的认识 
    之前在编写MFC程序的时候,有时会碰到句柄这一概念,由于对它一直不是很重视,所以并没有主动去了解它.随着不断深入学习MFC,特别是看完候先生的<<深入浅出MFC>>后,对句柄的实质产生了很大的兴趣,于是到处收集资料,现在总结一下. 
    handle的中文意思主要有多种,一种是作为名词:柄,把柄;一种是作为动词:处理.硬要从中文意思来说的话,这两种中文意思都可以用来勉强解释句柄.例如一个锅的手柄,你只要抓住了它,你就可以很好地操作那个锅,不过很明显你只能通过锅的手柄来做一些诸如炒菜之类的事,你不可能是因为抓住了锅的手柄才能去看电视.不能的物体都会至少有一个属于它的"手柄".在MFC里面,有很多对象,例如对话框,窗口,画笔,显示器,打印机等,每个对象都会产生一个属于它自己的句柄.oh!慢着,似乎还没说清楚句柄的本质,下面再作详细的解说吧.

    如果查看各种HANDLE的定义,如HDC,HPEN,HINSTANCE等等,你会发现有这样一个声明:

    DECLARE_HANDLE(HDC);

    再把DECLARE_HANDLE这个宏展开来看一下:

    #define DECLARE_HANDLE(name) struct name##__ { int unused; }; 
    typedef struct name##__ *name

    这是什么意思?用HDC替换上面的name来看看,我们就得到了下面的一段代码:

    struct HDC__

    {

    int unused;

    };

    typedef struct HDC__ *HDC

    oh,原来句柄就是一个指向某一结构的指针,这个结构体只有一个成员,它是一个整数(不知为什么MS要把这个成员叫做unused,难道真的没有用吗?).

    嗯,我们再看一个HANDLE的定义,在winnt.h头文件中,我们看到了HANDLE的定义:

    typedef PVOID HANDEL;

    PVOID是什么?再看它的定义:

    typedef void *PVOID;

    真相出来了,原来HANDLE不过是一个指向void型,即无类型的指针,嗯,目前的指针是32位的吧.其实也不能说HANDLE是一种指针,它只充当一种索引的作用.真的很难解释HANDLE是什么,再往下看看,只能意会吧,呵呵.

    知道了HANDLE的本质(一个32位的整数,用16进制表示),再来说说HANDLE的作用.看我前面第二段的例子,你可以了解到为了控制一个物体,你需要找到它的"手柄".HANDLE就是充当win32下各种"物体"的"手柄".事实上,很多windows API都需要一个HANDLE作为输入参数,这是因为API需要和一些你看不见的对象打交道,这些对象是不能被你所移动或修改的,所以不能给你一个指针来对它进行操作.oh,指针的确是个好东西,它所拥有的能力实在太强大了,但所谓能力越大,责任越大,使用指针的时候千万要小心,不然会造成毁灭性的错误.所以,为了安全,还是给你一个HANDLE吧,通过这个HANDLE,你就可以对那些对象进行一些处理.HANDLE在这里充当什么角色呢?应该算是一个中间人吧,HANDLE是固定的,它不会变,但是对象的地址会变,当对象在内存中的位置发生改变后,我们不能通过之前的对象指针找到对象,怎么办呢?嗯,这时候HANDLE的用处就出来了,HANDLE就是用来记录对象的最新地址的.有点明白了吧?换一种说法吧,嗯,其实就是你知道HANDLE在哪里,但你不知道对象在哪里,而HANDLE知道对象在哪里,所以,只要你知道了HANDLE在哪里,你就能找到对象(尽管你还是不知那个对象住在内存的哪个地方,不过找到它就行了,不是吗?).嗯,是不是有点像索引的作用呢?为什么不给我们知道对象在内存中的位置呢?呵呵,操作系统怕你对它进行一些不利的操作啊.反正你通过HANDLE能让对象做它应该做的事,这就足够了.这就是封装吧,MS最喜欢做的事情,呵呵.

    其实对于HANDLE的定义,MS公司也不能说得清清楚楚,把HANDLE翻译成句柄也是不太合适的,但有时就是这样,英文能理解的东西,翻译到中文反而就混乱了,所以"句柄"这个名词比较适合初学者,如我.那些有丰富编程经验的人一定不喜欢使用"句柄"这个名词吧,还是用handle这个原版英文单词比较容易理解
     

     

     

    句柄是不同于指针的,但是实际上的操作有想通的地方。创建一个窗体,或者创建DC、BITMAP……都会有相应的句柄产生。那么这些对象销毁的时候,他们对应的句柄也就失效了。或者说可以通过他们的句柄来销毁这些对象。

    句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址 访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化 了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门 登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。句柄地址(稳定)→记载着对象在内存中的地址→对象在内存中的地址(不稳定)→实际对象。但是,必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成 是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电 影院售给我们的门票总是不同的一个座位是一样的道理。

    HDC是设备描述表句柄。

    CDC是设备描述表类。

    用GetSafeHwnd和FromHandle可以互相转换

    指针可以当句柄

    句柄不一定都是指针

    句柄只是代表某一个对象的一个数字

    根据这个数字可以通过某种关系找到这个对象

    指针是一个对象的地址

    ::ReleaseDC();

    这句话是释放HDC的句柄,还是释放HDC句柄所指的内存?

    DC是设备上下文,用起来就像一根可以换笔蕊的笔壳.

    是不是只有某些对像有句柄?

    int i;

    int* p=&i;

    他的内存不会改变吧

    句柄简而言之就是指向结构的指针。

    ::ReleaseDC();

    int ReleaseDC(

     HWND hWnd, // handle to window

     HDC hDC     // handle to device context

    );

    展开全文
  • Handle的详细用法

    万次阅读 2019-11-02 14:04:34
    Handler:是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程的 MessageQueue 关联。 作用:调度消息,将一个任务切换到某个指定的线程中去执行。 为什么需要 Handler?...
  • Handle

    2020-10-18 22:32:33
    小笔记:Handle //这是Looper类中举例的一个用法。 class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void ...
  • Android之Handle全面理解

    万次阅读 2018-05-22 19:50:45
    一.什么是Handler Handler是Android给我们提供用来更新UI的一套机制,是一套消息处理机制,可以通过它来发送消息和处理消息。那作为开发者的我们,不禁会疑问?Google为什么要设计这套机制呢?...
  • 关于Handle的一些介绍

    千次阅读 2019-07-14 19:52:46
    Handler:是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程的 MessageQueue 关联。作用:调度消息,将一个任务切换到某个指定的线程中去执行。 Message为Handler接受和处理的消息对象。...
  • String判断相等

    千次阅读 2017-12-07 10:05:58
    源于一次公司项目,对java基础还是理解的太浅 例: String a String b a.equal(b)和b.equal(a)有什么区别 ...a.equal(b)和b.equal(a)表达式表达的意思是一样的,都是为了判定a和b两个string对象是否相同, ...
  • 谷歌浏览器添加JSON-Handle插件

    万次阅读 2018-01-08 14:11:23
    之前有写过获取最新谷歌host的文章,我用最新host翻墙的目的就是为了给浏览器安装json格式化插件,现在可以不用翻墙就能拿到JSON-Handle插件,办法如下: 1、访问http://jsonhandle.sinaapp.com/下载 2、...
  • mount.nfs: Stale file handle的问题解决办法 最近集群出现磁盘突然掉的问题,按照其他高手的方法解决,有三种方法 umount -f /directory fuser –k /path 3:暂缺 按照网络上给的方法处理,发现umount 之后...
  • 1. toad 连接Oracle数据库连接失败如图: 2. 导致这个情况的前因:toad运行情况下,突然断电。 3. 解决:toad 只是把默认的登陆连接...我的情况是:Connect Using 没有选择对,改为可用的正确选项就行了。......
  • 微信小程序:Component "页面路径" does not have a method " 方法名" to handle event "tap".
  • 32.windbg-!handle(句柄信息)

    千次阅读 2015-12-25 15:31:57
    handle !handle 扩展显示目标系统中一个或所有进程拥有的句柄的信息 0:001> !handle Handle 4 Type Directory Handle 8 Type File Handle c Type File Handle 10 Type Key Handle 14 Type
  • DECLARE_HANDLE()

    千次阅读 2012-07-09 20:44:23
    WNDCLASSA结构体中遇到的HINSTANCE...在WINDEF.H中有这样的语句DECLARE_HANDLE(HINSTANCE);,在WINNT.H中有这样的内容 #ifdef STRICT typedef void *HANDLE; #define DECLARE_HANDLE(name) struct name##__ { in
  •  Unable to handle kernel paging request at virtual address cc33cc33 …… pc is at kfree+0x44/0xd4 …… 经过分析,是因为对内存越界访问 //以下代码导致oops,原因是越界访问 ts_dev.buf[wr_pt].x=
  • 报错具体内容 报错原因:webpack 原生只支持 js 文件类型,及 es5 的语法 解决办法:配置解析规则,在 webpack.config.js 文件中配置 module: { rules: [ { test: /.vue$/, loader: 'vue-loader' ...
  • Stale NFS file handle的解决方法

    万次阅读 2017-05-04 11:53:23
    转载自:http://dikar.iteye.com/blog/634862 ...   Stale NFS file handle的解决方法   早上来到公司,发现有两台server有问题。 因为用df
  • 有时候,急着写代码,就容易犯一些自己都觉得很二的代码,出现如下异常提示:Default constructor cannot handle exception type UnsupportedEncodingException thrown by implicit super constructor. Must define ...
  • 0xC0000008: An invalid handle was specified

    千次阅读 2014-05-25 11:14:30
    0xC0000008: An invalid handle was specified 这种情况一般是重复关闭handle导致的。mark给自己以防以后遇到同样问题。
1 2 3 4 5 ... 20
收藏数 612,954
精华内容 245,181
关键字:

handle