句柄

Windows进程间通信

假装没事ソ 提交于 2020-01-21 20:07:27
  Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(InterProcess Communication, IPC),进程通信就是指 不同进程间进行数据共享和数据交换 。进程间通信的方式有: 1、文件映射   文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。   Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。 应用程序有三种方法来使多个进程共享一个文件映射对象:   (1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。   (2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字(可与文件名不同)。第二个进程可通过这个名字打开此文件映射对象。另外,第一个进程也可以通过一些其它IPC机制(有名管道、邮件槽等)把名字传给第二个进程。   (3)句柄复制:第一个进程建立文件映射对象,然后通过其它IPC机制(有名管道、邮件槽等

Addressable:7、异步操作处理(Async operation handling)

你。 提交于 2020-01-18 14:47:27
Addressables API的几种方法返回一个AsyncOperationHandle结构。此句柄的主要目的是允许访问操作的状态和结果。在您调用Addressables.Release或Addressables.ReleaseInstance进行该操作之前,该操作的结果是有效的(有关释放资源的更多信息,请参阅有关 内存管理的文档 )。 操作完成后,AsyncOperationHandle.Status属性为AsyncOperationStatus.Succeeded或AsyncOperationStatus.Failed。如果成功,则可以通过AsyncOperationHandle.Result属性访问结果。 您可以定期检查操作状态,也可以使用AsyncOperationHandle.Complete事件注册完成的回调。当不再需要返回的AsyncOperationHandle结构提供的资源时,应使用方法 释放它Addressables.Release 。 1、类型与无类型的句柄(Type vs. typeless handles) 大多数Addressables API方法都返回通用AsyncOperationHandle结构,从而为AsyncOperationHandle.Completed事件和AsyncOperationHandle.Result对象提供类型安全性

雷林鹏分享:PHP cURL 函数

徘徊边缘 提交于 2020-01-17 13:51:54
  概述   PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。   libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。   PHP中使用cURL实现Get和Post请求的方法   这些函数在PHP 4.0.2中被引入。   需求   为了使用PHP的cURL函数,你需要安装 » libcurl包。   PHP需要使用libcurl 7.0.2-beta 或者更高版本。在PHP 4.2.3 里使用cURL,你需要安装7.9.0或更高版本的libcurl。从PHP 4.3.0开始你需要安装7.9.0或更高版本的libcurl。从PHP 5.0.0开始你需要安装7.10.5或更高版本的libcurl。   安装   要使用PHP的cURL支持你必须在编译PHP时加上--with-curl[=DIR] 选项,DIR为包含lib和include的目录路径。在include目录中必须有一个名为curl,包含了easy.h和curl.h的文件夹

HRGN 剪裁区域

元气小坏坏 提交于 2020-01-17 07:57:32
什么是剪裁区域? 剪裁区域就是设备描述表中的区域,用于描画处理。 所以一切还要从区域说起: 设备描述表中的区域 与画笔、画刷和位图一样,区域也是GDI对象,需要调用DeletObject来删除创建的区域 区域类型句柄为HRGN 创建矩形区域 hRgn = CreateRectRgn(xLeft, yTop, xRight, yBottom); hRgn = CreateRectRgnIndirect(&rect); 创建椭圆区域 hRgn = CreateEllipticRgn(xLeft, yTop, xRight, yBottom); hRgn = CreateEllipticRgnIndirect(&rect); 创建圆角的矩形区域 CreateRoundRectRgn 创建多边形区域 hRgn = CreatePolygonRgn(&point, iCount, iPolyFillMode); iPolyFillMode 是 ALTERNATE 或者 WINDING ALTERNATE:封闭区域内部画随便一条射线,只有这条射线能穿过了奇数条边界线时才填充封闭区域 WINDING:封闭区域内部画随便一条射线,只有这条射线能穿过了奇数条边界线时才填充封闭区域,这和ALTERNATE一样。如果这条射线穿过偶数条边界线,如果一个方向(封闭区的边界线方向

【WebDriver API】python之selenium多窗口切换

 ̄綄美尐妖づ 提交于 2020-01-16 04:10:23
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。 以百度首页和百度注册页为例,在两个窗口之间的切换。 多窗口切换1.py # coding=utf-8 from selenium import webdriver import time # 访问百度 driver = webdriver.Chrome() driver.get("http://www.baidu.com") # 获取百度搜索窗口句柄 search_windows = driver.current_window_handle driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[3]/a[7]').click() time.sleep(3) driver.find_element_by_xpath('/html/body/div[4]/div[2]/div[2]/div/div/div/div/div/div[3]/a').click() # 获取打开所有窗口句柄 all_handles = driver.window_handles # 进入注册窗口 for handle in all_handles:

final关键字介绍

这一生的挚爱 提交于 2020-01-15 05:51:01
  许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。常数主要应用于下述两个方面:   (1) 编译期常数,它永远不会改变   (2) 在运行期初始化的一个值,我们不希望它发生变化   对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在编译期间提前执行,从而节省运行时的一些开销。在Java中,这些形式的常数必须属于基本数据类型(Primitives),而且要用final关键字进行表达。在对这样的一个常数进行定义的时候,必须给出一个值。 无论static还是final字段,都只能存储一个数据,而且不得改变。   若随同对象句柄使用final,而不是基本数据类型,它的含义就稍微让人有点儿迷糊了。对于基本数据类型,final会将值变成一个常数;但对于对象句柄,final会将句柄变成一个常数。进行声明时,必须将句柄初始化到一个具体的对象。而且永远不能将句柄变成指向另一个对象。然而,对象本身是可以修改的。Java对此未提供任何手段,可将一个对象直接变成一个常数(但是,我们可自己编写一个类,使其中的对象具有“常数”效果)。这一限制也适用于数组,它也属于对象。 下面是演示final字段用法的一个例子: // The effect of final on fields class Value { int i = 1; } public class

final关键字

柔情痞子 提交于 2020-01-15 05:50:46
final 由于语境(应用环境)不同,final 关键字的含义可能会稍微产生一些差异。 但它一般的意思就是声明“这个东西不能改变”。之所以要禁止改变,可能是 考虑到两方面的因素:设计或效率。由于这两个原因颇有些区别,所以也许会造 成 final 关键字的误用。 在接下去的小节里,我们将讨论 final 关键字的三种应用场合:数据、方法以 及类。 final 数据 许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。常数主 要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程 里。也就是说,计算可在编译期间提前执行,从而节省运行时的一些开销。在Java 中,这些形式的常数必须属于基本数据类型(Primitives),而且要用 final 关键字进行表达。在对这样的一个常数进行定义的时候,必须给出一个值。 无论 static 还是 final 字段,都只能存储一个数据,而且不得改变。 若随同对象句柄使用 final,而不是基本数据类型,它的含义就稍微让人有点 儿迷糊了。对于基本数据类型,final 会将值变成一个常数;但对于对象句柄,final 会将句柄变成一个常数。进行声明时,必须将句柄初始化到一个具体的对象。而 且永远不能将句柄变成指向另一个对象

文件操作进阶(读写文件、遍历目录、统计目录大小)

≯℡__Kan透↙ 提交于 2020-01-15 03:51:39
文件指针 若要使用文件指针方式进行操作,需要先打开文件,创建文件指针,然后使用指针进行读写,最后操作完成后关闭文件。 1、打开文件 fopen ( $filename , $mode ) $filename表示打开的文件路径,不仅可以是本地文件,还可以是HTTP或FTP协议的URL地址;$mode表示文件打开的模式 2、关闭文件 fclose ( $handle ) $handle表示fopen函数成功打开文件时返回的文件指针。如果文件关闭成功返回true,失败返回false 3、读取文件 fread ( $handle , $length ) 用于读取指定长度的字符串。$length用于指定读取的字节数。该函数在读取到$length指定的字节数,或读取到文件末尾时就会停止读取,返回读取到的内容。当读取失败时返回false 当使用fread函数读取文件时,会影响文件指针指向文件的位置。通过ftell函数可以返回当前文件指针的位置,通过rewind()函数可以倒回文件指针的位置 fgetc ( $handle ) 用于在打开的文件中读取一个字符,该函数每次只能读取一个字节,如果遇到EOF时,返回false fgets ( $handle [ , $length ] ) 用于读取文件中的一行。$length用于指定读取的字节数,该函数从文件中读取一行,并返回长度最多为$length

193_common lisp文件句柄的使用

ε祈祈猫儿з 提交于 2020-01-10 16:22:54
分析使用的例子来自于《实用common lisp编程》中的CD录入程序。或许是因为之前学习过其他的编程语言,我现在的编程语言的学习基本上都是在寻找之前已经掌握的编程语言的已知元素。当然,这只是第一步。当这一步过了之后,后面的提升则是针对这个编程语言的一些特性。 这一次找到的已知元素是C语言中的文件句柄,当然,在我之前学习过的一系列的脚本语言中也有这个元素。或许,拿语法清晰的Python做一个类比更简单吧! 如果是在Python中,这里涉及到的接口是open,open打开的文件句柄可以拥有不同的属性。比如说,最简单的读或者写。在common lisp中,相应的功能是一个宏,with-open-file。与python的open相似,这个宏打开文件的同时会将文件操作绑定到一个变量上。而打开文件的方式具有不同的属性。而其他语言中提到的句柄这个东西,就是common lisp中with-open-file需要绑定的变量。 以下是common lisp的代码: 上面的操作,打开一个文件,设置输出属性。如果文件已经存在,那么进行覆盖。第二个类似句柄的宏with-standard-io-syntax作用于print,将其行为设置为默认。因此,上面的函数功能就是把全局量*db*的信息存储到filename指定的文件中。 理解了上面的功能,读取基本是一个相反的操作。 以下是common lisp代码

管道通讯

烈酒焚心 提交于 2020-01-10 10:31:52
管道是一段被进程用来通讯的共享内存。创建pipe的进程称为服务端,连接到一个管道的进程叫做客户端。一个进程向管道中写入信息,接着另外一个进程读出其中数据。 有命名和匿名两种管道,相比之下匿名管道所需开销较小。这里用管道这个名词表明它是一个信息通道,概念上来说,一个管道连接两端。单向管道允许一端写另一段读,双向管道允许一个进程既可以读又可以向管道写数据。 1、匿名管道 匿名管道是个没有名字的单向管道,用来在父进程和子进程间传输数据。匿名管道总是在本机使用的,不可以用在网络上进行通讯。匿名管道通过使用唯一名字的命名管道来实现。因此,你可以将匿名管道的句柄作为参数传递给需要命名管道句柄的函数。 2、命名管道 命名管道是一个有名字,单向或者双向的,用在服务端和一个或多个客户端进行通讯。一个命名管道的所有实例共享同样的管道名, 但是每个实例都有各自的缓存和句柄 ,作为一个隔离的通道,让客户端-服务器端进行通讯,这些实例允许客户端同时使用相同名字的管道。 任何进程可以访问命名管道,需要进行安全检查,使得管道为相关或者不相关进程通讯提供了一种简单的方式。命名管道可以用在同一台计算机或者网络计算机之间的进程间通讯。任何进程既可以作为服务端又可作为客户端,使得端对端通讯成为可能。这里服务端的意思是创建了一个命名管道的进程,客户端是连接到命名管道实例的进程。示例如下: 服务端: #include