句柄

C#中invoke和beginInvoke的使用

£可爱£侵袭症+ 提交于 2019-12-02 18:27:21
https://www.cnblogs.com/NewBee-CHH/archive/2018/07/23/9355905.html 1.Control类中的invoke和beginInvoke的定义 # invoke的含义是:在拥有此控件的基础窗口句柄的现呈上同步执行指定的委托( 同步 ) beginInvoke的含义是:在创建控件的基础句柄所在线程上异步执行的委托( 异步 ) 句柄是一种抽象的概念,隐藏了内核实现的细节,同时为调用提供了方便,保证了内核的安全性。形象的比喻为“用一个小的东西拎起一堆东西的柄。可以将指针也看作一种新式的句柄,但他拥有更独特的含义:指向内存的某个地址。 在系统中有很多的内核对象,这些对象大多很庞大,拥有很多的属性,当需要传递这些属性时,首先不能直接复制,因为这样会很慢;其次也不能直接调用这些属性的首地址,这样会暴露属性的位置,进而导致属性被随意更改,影响系统的稳定;最后因为内存的地址可能会随时更改(windows基于虚拟内存,其内存管理器常常在内存中来回移动对象),直接调用会导致以后使用时找不到地址, 在这个基础上,采用一种句柄的概念。它是一种对对象的进一步抽象的过程(理解面向对象的概念),它会在进程的地址空间中设置一张表格,里面保存着某个对象的编号和这个编号对应的地址,通过这个地址去引用这个对象。这个编号就是句柄

jvm体系结构

不羁岁月 提交于 2019-12-02 13:36:26
JVM 位置 jvm体系结构图 类装载器ClassLoader ​ 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 类装载器ClassLoader分类 虚拟机自带的加载器 启动类加载器(Bootstrap)C++ 扩展类加载器(Extension)Java 应用程序类加载器(AppClassLoader)Java 也叫系统类加载器,加载当前应用的classpath的所有类 用户自定义加载器 Java.lang.ClassLoader的子类,用户可以定制类的加载方式 Execution Engine 执行引擎负责解释命令,提交操作系统执行 Native Interface 本地接口 本地接口的作用是融合不同的编程语言为 Java 所用 Native Method Stack 它的具体做法是Native Method Stack中登记native方法,在Execution Engine 执行时加载本地方法库。 PC 寄存器 ​ 每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。 方法区

CWND和HWND之间的关系和转换 和获取方法

橙三吉。 提交于 2019-12-02 12:43:44
CWnd与HWND的区别 一、区别 HWND是句柄,CWnd是 MFC 窗体类, CWnd 中包含HWND句柄成员对象是m_hWnd. HWND是Windows系统中对所有窗口的一种标识,即窗口句柄。这是一个SDK概念。 CWnd是MFC类库中所有窗口类的基类。微软在MFC中将所有窗口的通用操作都封装到了这个类中,如:ShowWindow等等,同时它也封装了窗口句柄即m_hWnd成员。 二、如何得到窗口对象指针CWnd * pCWnd 1、在窗体里,直接用 this->,//this就是本窗体的窗口对象指针 2、主窗体的类对象指针:AfxGetApp()->m_pMainWnd->, //AfxGetApp()->m_pMainWnd就是主窗体的窗口对象指针 3、pCWnd=GetDlgItem(ID_EDIT_NAME);//GetDlgItem 函数可以得到某个 控件的窗口对象指针 三、如何得到窗口句柄 HWND Handle 1、Handle=this->m_hWnd 2、GetDlgItem(ID_EDIT_NAME); 3、Handle=::GetDlgItem(this,IDC_STATIC_MODE); //得到本窗体内某个控件的句柄 四、转换 CWnd * pCWnd; HWND Handle; pCWnd=FromHandle(Handle); Handle

json数据解析

試著忘記壹切 提交于 2019-12-02 08:45:39
1、json文本和json对象的区别 json文本是符合json格式的文本,是一个字符串 json对象是内存中的一个对象,拥有属性和方法,可以通过对象获取其中的参数信息 python中一般来说json对象是指字典 python中字典格式和json格式区别 : 字典中的引号支持单引号和双引号,JSON格式只支持双引号 字典中的True/False首字母大写,JSON格式为true/false 字典中的空值为None, JSON格式为null 2、json格式操作方法 序列化:(字典---->文本/文件句柄):json.dump()/json.dumps() 反序列化(文本/文件句柄---->字典):json.load()/json.loads() import json #将字典转化为合法的json文本 data = {"username":"test","password":"123456"} str_data = json.dumps(data) print(str_data) json.dumps()方法可以将json文本格式化输出 import json #将json格式转化为字典,方便获取其中的参数 data = '{"username":"test","password":"123456"}' str_data = json.loads(data) print(str

Linux下tomcat报错“java.net.SocketException: Too ma...

匆匆过客 提交于 2019-12-02 08:01:39
部署到linux下的tomcat,今天发现包了“java.net.SocketException: Too many open files”,以前从来没有遇到过,在此记录一下: 彻底解决问题的是 第三步 , 所以,可以直接跳到第三步去看解决方法和步骤,当日第一、第二步是我不断探索,尝试解决问题的过程,虽然没有找到点上,但是还是有些意义的,因为linux切实有打开资源数量的限制,肯定需要修改的。 异常信息: ............ Oct 17, 2011 5:22:41 PM org.apache.tomcat.util.net.JIoEndpoint$Acceptor run SEVERE: Socket accept failed java.net.SocketException: Too many open files at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:375) at java.net.ServerSocket.implAccept(ServerSocket.java:470) at java.net.ServerSocket.accept

文件操作

帅比萌擦擦* 提交于 2019-12-02 02:14:43
文件操作 利用python操作文件的几个参数 文件路径:path 打开方式:mode(r(读),w(写),a(追加),读写,写读) 编码方式:utf-8 ,gbk,gb2312.... open open 内置函数,open底层调用的是操作系统的接口 f1,变量. (f1,fh,file,file_handler,f_h) 文件句柄.通过对文件的任何操作都会通过文件句柄. 的方式. encoding:可以不写,不写参数,默认编码本.默认编码本:操作系统的默认的编码 ****文件句柄****是一个迭代器 windows:gbk linux:utf -8 mac: ust -8 f.close (关闭文件) open操作文件的三步 1. 打开文件 2. 对文件句柄的操作 3. 关闭文件 报错处理 1. unicodeDecodeError 错误,编译错误 2. 路径分隔符产生异议: 路径前面加r 文件的读操作(表示要对文件进行读操作) r,rb(bytes模式读),r+(读写),r+b...四种模式 - r - read() 全部读取出来 - read(n) 读取n个字符 - readline() 读取一行 - readlines() 返回一个列表,列表中的每个元素是原文件的每一行 - for i in f. - rb(操作的是非文本的文件[图片,视频,音频],但可以操作文本文件)

python基础学习——文件处理模式:读r&写r&追加a&r+可读可写

不想你离开。 提交于 2019-12-01 17:33:12
1、文件处理流程   1)打开文件,得到文件句柄并赋值给一个变量   2)通过句柄对文件进行操作   3)关闭文件   4)文件读写的参数必须是字符串   5)样例 f=open("陈情令","r",encoding="utf8") #open("陈情令",encoding="utf8")文件句柄, # "陈情令"是文件路径,当文件在同一层级路径时,可以直接写文件名,取相对路径#f就是变量#默认为只读模式r data=f.read()#读取文件全部内容 print(data) f.close()#关闭文件 2、文件处理:读模式 f=open("陈情令","r",encoding="utf8") #open("陈情令",encoding="utf8")文件句柄, print("第1行:",f.readline(),end="") #去掉换行 print("第2行:",f.readline()) print("第3行:",f.readline()) print("第4行:",f.readline()) print("第5行:",f.readline()) print("第6行:",f.readline()) print(f.readable()) #判断文件模式是否是可读模式 print("第7行:",f.readline()) print("第8行:",f.readline()) f

Windows程序设计3(资源、绘图、坐标系)

大兔子大兔子 提交于 2019-12-01 02:12:13
一、 RC 资源的使用 资源相关 资源脚本文件: *.rc 文件 编译器: RC.EXE 菜单资源的使用 1 添加菜单资源:通过菜单栏中插入( rc )菜单资源。或直接添加资源脚本到工程中。 2 加载菜单资源 2.1 在注册时设置菜单资源 2.2 加载菜单资源,设置到窗口 HMENU LoadMenu( HINSTANCE hInstance, // 应用程序句柄 LPCTSTR lpMenuName // 菜单字符串资源(或菜单资源 ID ) ); MAKEINTRESOURCE 宏,可以使得数字形式的资源 ID,转化为字符串形式的资源ID。 宏原型: LPTSTR MAKEINTRESOURCE( WORD wInteger // 转化的整数 ); 使用地方: 1. CreateWindow/Ex 创建窗口时。 如:wndclass.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1); 2. 在WM_CREATE时,通过SetMenu(): 函数原型 :BOOL SetMenu( HWND hWnd, // 窗口句柄 HMENU hMenu // 菜单句柄 , 可以通过 LoadMenu() 获得。 ); 如: HMENU hMenu=LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_MENU1)); SetMenu

Windows程序设计3(资源、绘图、坐标系)

﹥>﹥吖頭↗ 提交于 2019-12-01 01:44:42
一、RC资源的使用 •资源相关 资源脚本文件:*.rc文件 编译器:RC.EXE •菜单资源的使用 1 添加菜单资源:通过菜单栏中插入(rc)菜单资源。或直接添加资源脚本到工程中。 2 加载菜单资源 2.1 在注册时设置菜单资源 2.2 加载菜单资源,设置到窗口 HMENU LoadMenu( HINSTANCE hInstance, //应用程序句柄 LPCTSTR lpMenuName //菜单字符串资源(或菜单资源ID) ); MAKEINTRESOURCE宏,可以使得数字形式的资源ID,转化为字符串形式的资源ID。 宏原型: LPTSTR MAKEINTRESOURCE( WORD wInteger // 转化的整数 ); 使用地方: 1.CreateWindow/Ex 创建窗口时。 如:wndclass.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1); 2. 在WM_CREATE时,通过SetMenu(): 函数原型:BOOL SetMenu( HWND hWnd, // 窗口句柄 HMENU hMenu // 菜单句柄,可以通过LoadMenu()获得。 ); 如: HMENU hMenu=LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_MENU1)); SetMenu( hWnd , hMenu );

系统拆分解耦利器之消息队列---RabbitMQ-Persistence Configuration

南笙酒味 提交于 2019-11-30 22:15:42
[一曲广陵不如晨钟暮鼓] 鉴于RabbitMQ官方文档的内容过多,且大部分内容在应用时基本使用默认配置,因此,后续我们将只翻译部分文档。更多内容请各位看官参考其他资料吧。 本文,我们将介绍RabbitMQ持久化配置相关的内容,废话不表,马上开始正文部分吧。 -------------------------------------------------------------------------------------------------------------------------------------------------------- Persistence Configuration RabbitMQ的持久层是为了在大多数没有配置的情况下,仍然提供相对较好的服务。但其中的一些配置,在某些情况下,是非常有用的。接下来,我们就来解释如何配置它们。强烈建议你在开始修改这些配置之前先 阅读本文相关内容 。 How persistence works 首先,在某些场景下:持久的和临时的消息都被写入到磁盘中。其中,持久的消息将在其到达队列之时就会被写入到磁盘之中,而临时的消息只会在内存不够用时,为了释放内存压力而被临时的写入磁盘当中。此时,持久化的消息也采用了同样的策略。持久层的作用是将这两种类型的消息都写入到此到磁盘当中。 在本文中我们说“队列queue