精华内容
下载资源
问答
  • 任务管理器中看到javaw.exe的句柄数能说明什么问题? 对象的引用吗?进程的句柄?还是其它?
  • 任务管理器截图 上图中的内容相信大家都见过,红色框框中的句柄到底是什么,不知道大家有没有产生过疑问。今天我就来讲讲句柄。由于Windows是支持虚拟内存机制的(不明白的请先行补充一下),这就导致某对象在一次换进...
    d9fd7eb9741ca8e3cda387d55f8b004f.png

    任务管理器截图

    上图中的内容相信大家都见过,红色框框中的句柄到底是什么,不知道大家有没有产生过疑问。今天我就来讲讲句柄。

    由于Windows是支持虚拟内存机制的(不明白的请先行补充一下),这就导致某对象在一次换进患出后的地址几乎不可能一致。为解决这个问题,Windows引入了句柄。

    系统为每个进程分配一定大小的内存区域来存放句柄,即一个个64bit的无符号整数值。每个无符号整数值相当于一个指针,指向内存中的另一个区域(设为area),当对象的位置发生变化时,area的值被更新为此刻对象在内存中的地址。这样,只要我们掌握了句柄的值就可以找到区域area,进而找到对象。而句柄的值在程序的一次运行过程中是不会改变的,操作系统以句柄来寻找对象。

    我们从一些头文件,以及一些windows早期的代码中看一看句柄的定义

    在Winnt.h头文件中定义了通用句柄:

    1. #ifdef STRICT
    2. typedef void *HANDLE;
    3. #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
    4. #else
    5. typedef PVOID HANDLE;
    6. #define DECLARE_HANDLE(name) typedef HANDLE name
    7. #endif
    8. typedef HANDLE *PHANDLE;

    在Windef.h种定义来特殊句柄:

    1. #if !defined(_MAC) || !defined(GDI_INTERNAL)
    2. DECLARE_HANDLE(HFONT);
    3. #endif
    4. DECLARE_HANDLE(HICON);
    5. #if !defined(_MAC) || !defined(WIN_INTERNAL)
    6. DECLARE_HANDLE(HMENU);
    7. #endif
    8. DECLARE_HANDLE(HMETAFILE);
    9. DECLARE_HANDLE(HINSTANCE);
    10. typedef HINSTANCE HMODULE; /* HMODULEs can be used in place of HINSTANCEs */
    11. #if !defined(_MAC) || !defined(GDI_INTERNAL)
    12. DECLARE_HANDLE(HPALETTE);
    13. DECLARE_HANDLE(HPEN);
    14. #endif
    15. DECLARE_HANDLE(HRGN);
    16. DECLARE_HANDLE(HRSRC);
    17. DECLARE_HANDLE(HSTR);
    18. DECLARE_HANDLE(HTASK);
    19. DECLARE_HANDLE(HWINSTA);
    20. DECLARE_HANDLE(HKL);
    0ffa5fb681798d68f3be42a3d140bc7b.png

    内存与句柄

    可以看出,通用句柄时一个void指针,显然是一个马甲,微软并不想泄露句柄的真实类型。当然,微软还是一不小心在其他地方泄露来句柄的本质。如果你定义一个强制类型检查STRICT,又定义了特殊类型句柄DECLARE_HANDLE,对于诸如DECLARE_HANDLE(HMENU)定义如下:

    1. typedef struct HMENU__
    2. {
    3. int unused;
    4. } *HMENU;

    守得云开见日出了,句柄实际上是一种指向结构题的指针。一些大神猜测Windows的句柄结构类似如下:

    1. struct
    2. {
    3. int pointer; //指针段
    4. int count; //内核计数段
    5. int attribute; //文件属性段:SHARED等等
    6. int memAttribute; //内存属性段:MOVABLE和FIXED等等
    7. ...
    8. };
    0ec7c2037f07736c5d6e977deaa8f6ee.png

    内存管理器工作原理

    在Windows系统中,内存管理器管理的直接对象就是句柄,以句柄管理指针。当Windows系统内存整理时检测内存属性端段,当可移动时,就移动逻辑地址,移动完之后更新新的地址到对应句柄的指针段中,当使用MOVABLE地址时必须LOCK,计数器将+1,内存管理器检测到计数器>0则不移动逻辑地址,此时才可获得固定的逻辑地址来操作无力内存,使用完之后再UNLOCK进行操作,内存管理器就可以再次移动逻辑地址来,所以在虚拟内存管理机制不会出现访问混乱的情况

    感谢图片提供者

    展开全文
  •   windows的任务管理器暗中破坏菜单窗口的规则其实并不复杂如果一个窗口被破坏,在窗口的菜单也被摧毁:  menu bar获取方法 (Get­Menu /Set­Menu ) the system menu获取方法 (Get­System­...

     

    windows的任务管理器暗中破坏菜单窗口的规则其实并不复杂

    • 如果一个窗口被破坏,在窗口的菜单也被摧毁:
      •  menu bar获取方法 (Get­Menu /Set­Menu )
      •  the system menu获取方法 (Get­System­Menu )
    • 如果菜单被销毁,其子也被摧毁.
    • 如果你更换一个MIIM_SUBMENU子菜单,菜单是摧毁旧的
      .
    • 如果你传递bRevert = TRUE给GetSystemMenu获得的菜单句柄 ,那么旧的系统菜单被破坏,重新一个干净的系统菜单,在它的位置创建。

      上述情况以外,通过调用 Destroy­Menu   就摧毁窗口,随便你自己编程设定。

     

    原来的问题,本来是有误解:

             如果旧的对象属于一个窗口类,我们摧毁了旧的对象,我们怎么知道,同一类的其他窗口都不会惹上麻烦?

     

     

    有些人以为这里是每个窗口的类都是同样的菜单 ,但如果是这样的话, 一个程序就创建了两个相同的类窗口 一个窗口的菜单的修改会影响其他类。所以不可能是这样的。在Windows 95,打开两个浏览器窗口,并设置成不同的视图。这两个窗口现在有不同的菜单:其中一人有一个弹出旁边的大图标菜单项,然而其他有菜单项弹出 “详细信息”。

     

    当你注册这个窗口类的时候,你要传你设计菜单。但是你要根据下面的模板做:

        WNDCLASS wc;
    ...
    wc.lpszMenuName = MAKEINTRESOURCE(...);

     

    当前还没有菜单,到你想要一个菜单的时候,只需说明如何创建一个菜单。当你创建一个这个类的窗口,窗口管理器通过执行初始化等效的菜单
    SetMenu(hwnd, LoadMenu(pWndClass->hInstance,
    pWndClass->lpszMenuName));

    系统菜单以同样的方式 :每个窗口开始了一个默认的系统菜单,当你调用GetSystemMenu 设置bRevert = FALSE,你就会得到一个到该系统菜单句柄
    你可以修改你想要的内容 ,而不会影响任何其他菜单。系统菜单有不足的地方,你可以通过传递bRevert
    = true来询问窗口管理器破坏当前的系统菜单,或者换一个新的默认的系统菜单。


    原文链接、:http://blogs.msdn.com/b/oldnewthing/archive/2010/05/27/10016004.aspx
    展开全文
  • 任务管理器-性能中各项的意义

    千次阅读 2012-03-27 10:19:28
    任务管理器-性能中各项的意义 总数:句柄数,线程数,进程数 物理内存(k):总数,可用数,系统缓存,  内存使用:总数,限制,峰值,  核心内存:总数,分页数,未分页,  PF使用 都是什么意思? ...
    任务管理器-性能中各项的意义

    总数:句柄数,线程数,进程数
    物理内存(k):总数,可用数,系统缓存, 
    内存使用:总数,限制,峰值, 
    核心内存:总数,分页数,未分页, 
    PF使用

    都是什么意思?

    一:总数中的 
    1):句柄数:所谓句柄,简单的说就是 Windows 用来标识被应用程序所建立或使用对象的一个长整型数据,Windows 使用各种各样的句柄来标识诸如应用程序实例、窗口、控制、位图和GDI对象等等,是一种指针的指针。 
    2):线程数:指程序中能独立运行的部分。 
    3):进程数:运行的程序数目。 
    二:物理内存中的


    1):总数:好理解,就是机子里所配置的,看得见摸得着的内存总量。若有内存256MB,即256×1024=262144KB,262144KB的内存减去512KB的高位内存,再减去系统内核占用的16KB,即为:实际内存总数261616KB。 
    2):可用数:物理内存中可被程序使用的空余量。但实际的空余量要比这个数值略大一些,因为物理内存不会在完全用完后才去转用虚拟内存的。也就是说这个空余量是指使用虚拟内存(Page File)前所剩余的物理内存。 
    3:系统缓存:被分配用于系统缓存用的物理内存量。主要来存放一些关键程序和数据等。一但系统或者程序需要,部分内存会被释放出来,也就是说这个值是可变的。 

    三:内存使用: 
    1):总数:是被操作系统和正运行程序所占用内存总和,包括物理内存和虚拟内存(Page File)。它和上面的PF使用率是一致的。 
    2):限制:指系统所能提供的最高内存量,是物理内存(RAM)和虚拟(Page File)内存。 
    3):峰值:指一段时间内系统曾达到的内存使用最高值。如果这个值超过本机物理内存的数量,则应当增加物理内存以提升计算机性能;若这个值接近上面的“限制”的时候,则意味着要同时增加物理内存和虚拟内存(Page File)。 


    四:核心内存: 
    1):总数:操作系统核心程序使用的物理内存总数。通常,这一数值总是越低越好些的。 
    2):分页数:可以复制到页面文件中的内存,一旦系统需要这部分物理内存的话,它会被“映射”到硬盘,由此可以释放部分物理内存。 
    3:未分页:保留在物理内存中的内存,这部分不会被映射到硬盘,即页面文件中 

    五:PF使用: 
    PF是页面文件 Page File 的简写。这个数字容易让人误解,被认为是系统当时使用的页面文件的大小。其正确的含义应为:正在使用的物理内存和虚拟内存之和。实际使用的页面文件大小可以使用第三方软件,如 PageFile Monitor 等查看,也可以通过 Windows 控制台来查看

      在W2K/XP中,同时按下Ctrl+Alt+Del键,可以打开Windows任务管理器,单击“进程”,可以看到很多正在运行的EXE进程:

      【System Idle Process】:这是关键进程,只有16kB,循环统计CPU的空闲度,这个值越大越好。该进程不能被结束,该进程似乎没低于过25%,大多数情况下保持50%以上。

      【system】:system是windows页面内存管理进程,拥有0级优先。(当system后面出现.exe时是netcontroller木马病毒生成的文件,出现在c:\\windows目录下,建议将其删除。)

      【explorer】:explorer.exe控制着标准的用户界面、进程、命令和桌面等。explorer.exe总是在后台运行,根据系统的字体、背景图片、活动桌面等情况的不同,通常会消耗5.8MB到36MB内存不等。(explorer.exe和Internet Explorer可不同)

      【IEXPLORE】:iexplore.exe是Microsoft对因特网的主要编程器.,这个微软视窗应用让你畅游网络有了地方。 iexplore.exe是非常必要的过程,不应终止,除非怀疑造成问题。它的作用是加快我们再一次打开IE的速度,当关闭所有IE窗口时,它将依然在后台运行。当我们用它上网冲浪时,占有7.3MB甚至更多的内存,内存随着打开浏览器窗口的增加也增多。

      【ctfmon】:这是安装了WinXP后,在桌面右下角显示的语言栏。如果不希望它出现,可通过下面的步骤取消:控制面板-区域和语言选项-语言-详细信息-文字服务和输入语言-(首选项)语言栏-语言栏设置-把在桌面上显示语言栏的勾取消。这样会为你节省4MB多的内存。

      【wowexec】:用于支持16位操作系统的关键进程,不能终止。

      【csrss】:这是Windows的核心部份之一,全称为Client Server Process。这个只有4K的进程经常消耗3MB到6MB左右的内存,不能终止,建议不要修改此进程。

      【dovldr32】:为了节省内存,可以将禁止,它占用大约2.3MB到2.6MB的内存。

      【winlogon】:这个进程处理登录和注销任务,事实上,这个进程是必需的,它的大小和你登录的时间有关。

      【services】:services.exe是微软windows操作系统的一部分。用于管理启动和停止服务。该进程也会处理在计算机启动和关机时运行的服务。这个程序对你系统的正常运行是非常重要的,该进程系统禁止结束。

      【svchost】:Svchost.exe是属于微软windows操作系统的系统程序,用于执行dll文件。这个程序对你系统的正常运行是非常重要的。开机出现“Generic Host Process for Win32 Services遇到问题需要关闭”一般都是说的这个进程找不到dll文件所致。

      【msmsgs】:这是微软的Windows Messengr(即时通信软件)著名的MSN进程,在WinXP的家庭版和专业版里面绑定的,如果你还运行着Outlook和MSN Explorer等程序,该进程会在后台运行支持所有这些微软号称的很Cool的,NET功能等新技术。

      【msn6】:这是微软在WinXP里面的MSN浏览器进程,当msmsgs.exe运行后才有这个进程。

      【Point32】:这是安装了特殊的鼠标软件(Intellimouse等等)后启动的等程序,这不是系统必须的进程,通过用户许可协议安装。由于在WinXP里面内建了很多鼠标新功能,所以,就没有必要在系统后台运行,既浪费1.1MB到1.6MB的内存,还要在任务栏占个地方!

      【spoolsv】:用于将windows打印机任务发送给本地打印机,关闭以后一会又自己开开。

      【Promon】:这是Intel系列网卡配置和安装的程序,在任务栏显示图标控制程序,占据大约656KB到1.1MB的内存。

      【smss】:只有45KB的大小却占据着300KB到2MB的内存空间,这是一个Windows的核心进程之一,是windowsNT内核的会话管理程序。

      【taskmgr】:如果你看到了这个进程在运行,其实就是看这个进程的“任务管理器”本身。它大约占用了3.2MB的内存,当你优化系统时,不要忘了把它也算进去。

      【Tastch】:在XP系统中安装了powerToys后会出现此进程,按Alt+Tab键显示切换图标,大约占用1.4MB到2MB的内存空间。

      【lsass】:本地安全权限服务。是微软安全机制的系统进程,主要处理一些特殊的安全机制和登录策略。

      【atievxx】:这是随ati显卡硬件产品驱动一起安装而来。它不是纯粹的系统程序,但如果终止它,可能会导致不可知的问题。

      【alg】:这是微软windows操作系统自带的程序。它用于处理微软windows网络连接共享和网络连接防火墙,这个程序对你系统的正常运行是非常重要的

    展开全文
  • 用MFC 来写的一个对话框程序.....任务管理器就可以看到句柄数就增加一个..我写这个对话框程序不停的靠WM_COPYDATA通信.这样长时间下来.句柄数就非常非常的大了..为什么这个句柄会增加,又如何把这个句柄释放呢?
  • 用CreateThread创建线程并在线程内使用ffmepg API解码,线程结束并且CloseHandle后,从任务管理器发现相应的exe句柄比创建线程之前增加,并没有完全释放,请问什么? ffmpeg解码过程如下:av_register_all ->...
  • With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭...

    With语句是什么?

    有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

    如果不用with语句,代码如下:

    file = open("/tmp/foo.txt")
    data = file.read()
    file.close()
    


    这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是处理异常的加强版本:

    file = open("/tmp/foo.txt")
    try:
        data = file.read()
    finally:
        file.close()


    虽然这段代码运行良好,但是太冗长了。这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:

    with open("/tmp /foo.txt") as file:
        data = file.read()


    with如何工作?

    这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。

    紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

    下面例子可以具体说明with如何工作:
     

    class Query(object):
    
        def __init__(self, name):
            self.name = name
    
        def __enter__(self):
            print('Begin')
            return self
    
        def __exit__(self, exc_type, exc_value, traceback):
            print('exc_type:',exc_type,"\nexc_value:",exc_value,"\ntraceback:",traceback)
            if exc_type:
                print('Error:%s'%exc_type)
            else:
                print('End')
            return True
    
        def query(self):
            print('Query info about %s...' % self.name)
    
    
    with Query('Bob') as q:
        q.query()

    输出如下

    Begin
    Query info about Bob...
    exc_type: None 
    exc_value: None 
    traceback: None
    End
    

    with Query('Bob') as q:

    1 with Query('Bob') >> 触发__enter__(),拿到返回值

    2.as q ----> q=返回值

    with Query('Bob') as q  等同于 q=  Query('Bob').__enter__()

    4.执行代码块

    ①,没有异常情况下,整个代码块运行完成后触发__exit__,三个返回值都为None

    ②,有异常情况下,从异常出现的位置触发__eixt__

         a.如果__exit__的返回值为True,代表吞吐了异常

         b. 如果__exit__的返回值不为True,代表吐出了异常

         c.__exit__的运行完成就代表了整个with语句的执行完毕

     

    class Query(object):
    
        def __init__(self, name):
            self.name = name
    
        def __enter__(self):
            print('Begin')
            return self
    
        def __exit__(self, exc_type, exc_value, traceback):
            print('exc_type:',exc_type,"\nexc_value:",exc_value,"\ntraceback:",traceback)
            if exc_type:
                print('Error:%s'%exc_type)
            else:
                print('End')
            return True
    
        def query(self):
            q2
            print('Query info about %s...' % self.name)
    
    
    with Query('Bob') as q:
        q.query()
    
    
    ## 运行:
    Begin
    exc_type: <class 'NameError'> 
    exc_value: name 'q2' is not defined 
    traceback: <traceback object at 0x0000010CC4F8D648>
    Error:<class 'NameError'>

    去掉  return True 报错

    Begin
    Traceback (most recent call last):
    exc_type: <class 'NameError'> 
      File "F:/django/alipay/check/322.py", line 49, in <module>
    exc_value: name 'q2' is not defined 
        q.query()
    traceback: <traceback object at 0x0000028EB2C4D648>
      File "F:/django/alipay/check/322.py", line 44, in query
    Error:<class 'NameError'>
        q2
    NameError: name 'q2' is not defined

    @contextmanager

    编写__enter__和__exit__仍然很繁琐,因此Python的标准库contextlib提供了更简单的写法,上面的代码可以改写如下:

    from contextlib import contextmanager
    
    class Query(object):
    
        def __init__(self, name):
            self.name = name
    
        def query(self):
            print('Query info about %s...' % self.name)
    
    @contextmanager
    def create_query(name):
        print('Begin')
        q = Query(name)
        yield q
        print('End')

    @contextmanager这个decorator接受一个generator,用yield语句把with ... as var把变量输出出去,然后,with语句就可以正常地工作了:

    with create_query('Bob') as q: q.query()

    很多时候,我们希望在某段代码执行前后自动执行特定代码,也可以用@contextmanager实现。例如:

    @contextmanager
    def tag(name):
        print("<%s>" % name)
        yield
        print("</%s>" % name)
    
    with tag("h1"):
        print("hello")
        print("world")
    
    上述代码执行结果为:
    <h1>
    hello
    world
    </h1>

    代码的执行顺序是:

    1. with语句首先执行yield之前的语句,因此打印出<h1>;
    2. yield调用会执行with语句内部的所有语句,因此打印出hello和world;
    3. 最后执行yield之后的语句,打印出</h1>。

    因此,@contextmanager让我们通过编写generator来简化上下文管理。

     

     

     

     

    展开全文
  • 对于应用程序创建的大多数对象,可以依赖垃圾回收自动执行必要的内存管理任务。但是,非托管资源需要显式清除。最常用的非托管资源类型包装操作系统资源的对象,例如,文件句柄、窗口句柄或网络连接。虽然垃圾...
  • 如何查看文件夹被什么程序使用

    千次阅读 2018-05-16 11:09:48
    1:打开任务管理器选择“性能”&nbsp;&nbsp;2:单击下部的“资源监视器”&nbsp;&nbsp;3:选择“CPU”,在下部可以看到“关联的句柄”搜索框&nbsp;&nbsp;4:在该搜索框中输入要删除的文件名...
  • 产品标准化后,在客户现场跑了一段时间没问题,然后突然爆发性说系统提示内存不足,导致Windows卡死,软件无法运行!...漏掉检查的,在任务管理器里,没有去观察句柄!!!!为什么,粗心阿! ...
  • 跑了一下发现,在任务管理器中结束被启动的进程后,OpenProcess照样能获得进程句柄,但在任务管理器中此进程确实不存在了。考虑到进程句柄是一个内核对象。内核对象有引用计数,引用计数为0后才会销毁,OpenProcess...
  • 内存监控

    2015-10-16 16:56:00
    任务管理器”内存列的含义是什么? Windows 任务管理器中的几个内存概念 VC 监控进程内存使用情况 PSAPI—Query Process Memory Usage - sparkliang的专栏 - 博客频道 - CSDN.NET 完。 转载于:...
  • 打开电脑任务管理器:在进程一栏可以看见当前电脑进程; 句柄:long数字,操作系统标识应用程序的。 多线程:一个进程有多个线程同时运行; 计算机为什么可以多线程: 打开电脑设备管理器: 这6核12线程,...
  • 11.2.2 任务管理 11.2.3 与WinSock DLL的链接 11.3 DLL实例 11.3.1 WSASimpl应用程序 11.3.2 WSASimpl DLL 第12章 移植BSD Sockets 12.1 Windows Sockets与Berkeley Sockets的差异 12.1.1 socket不是文件句柄 ...
  • EndTask

    千次阅读 2010-10-04 15:21:00
    这种方法只能对付进程管理器的结束进程,却无法解决结束任务。昨晚经好友指点,才知道原来结束任务是通过EndTask这个API调用实现的,小试牛刀,Hook掉这个API,成功解决!很迷惑,这个微软既然有TerminateProcess...
  • · 理解垃圾回收器是如何管理内存资源的 · 使用线程池、任务、取消、计时和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、...
  • 超爽的自学课件(java)

    2007-09-16 16:04:04
    <br>(11) 第11章:运行期类型鉴定 若只有指向基础类的一个句柄,Java的运行期类型标鉴定(RTTI)使我们能获知一个对象的准确类型是什么。一般情况下,我们需要有意忽略一个对象的准确类型,让Java的动态绑定...
  • 若只有指向基础类的一个句柄,Java的运行期类型标鉴定(RTTI)使我们能获知一个对象的准确类型是什么。一般情况下,我们需要有意忽略一个对象的准确类型,让Java的动态绑定机制(多形性)为那一类型实现正确的行为。...
  • php高级开发教程说明

    2008-11-27 11:39:22
    后在适当的地方加以例外处理,当写一个应用程序时,应该知道你的代码从事的是什么工作, 能够快速地从一点转到另一点—但其他人可能认为这并不容易。如果你从开发组的某个人手 中获得一个源文件并需要添加一些特征,...
  • 7.1 什么是Perl 60 7.2 Perl的现状 60 7.3 初试Perl 60 7.4 Perl变量 60 7.4.1 标量 60 7.4.2 数组 63 7.4.3 相关数组 65 7.5 文件句柄和文件操作 65 7.6 循环结构 66 7.6.1 foreach循环 66 7.6.2 判断运算 66 7.6.3...
  • Reversing:逆向工程揭密

    热门讨论 2010-06-21 17:00:47
    记得第一次做与逆向有关的工作2000年,当时由于项目的需要,做过一个钩子(hook)程序,用于截获一个第三方控件发出的消息,但是当时还不知道什么是逆向工程。第一次看到“逆向工程”这个词在2001年的《机械工程...
  • 载操作符成员函数如何被用来管理类的类型转换的。 第12章:类和动态内存分配 一般来说,让类成员指向动态分配的内存很有用。如果程序员在类构造函数中使用new来分配动态内存,就 有责任提供适当的析构函数,...
  • 21.1 什么是套接口 21.2 两种类型的Internet套接口 21.3 网络协议分层 21.4 数据结构 21.5 IP地址和如何使用IP地址 21.5.1 socket() 21.5.2 bind() 21.5.3 connect() 21.5.4 listen() 21.5.5 accept() 21.5.6 send()...
  • 载操作符成员函数如何被用来管理类的类型转换的。 第12章:类和动态内存分配 一般来说,让类成员指向动态分配的内存很有用。如果程序员在类构造函数中使用new来分配动态内存,就 有责任提供适当的析构函数,...
  • 载操作符成员函数如何被用来管理类的类型转换的。 第12章:类和动态内存分配 一般来说,让类成员指向动态分配的内存很有用。如果程序员在类构造函数中使用new来分配动态内存,就 有责任提供适当的析构函数,...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    Windows系统一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。 1、消息的组成:一个消息由一个消息名称(UINT),和...
  • windows 程序设计

    2011-07-24 21:16:30
    Kernel(日前由16位的KRNL386.EXE和32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。User(由16位的USER.EXE和32位的USER32.DLL实作)指使用者接口,实作所有...
  • 3.1.3 通过库管理器创建自己的库 49 3.2 执行控制语句 50 3.2.1 真和假 50 3.2.2 if-else语句 50 3.2.3 while语句 51 3.2.4 do-while语句 51 3.2.5 for语句 52 3.2.6 关键字break 和 continue 53 3.2.7 ...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

任务管理器句柄是什么