文件句柄

Duilib之源码分析

你。 提交于 2019-11-28 20:42:47
《duilib之源码分析》 1 stdAfx.h * lengthof(x) 计算数组长度宏 * MAX 两值最大 * MIN 两值最小 * CLAMP(x,a,b) x在a,b之间则取x否则取最小 2 UIBase * UI_WNDSTYLE_ 窗口风格属性 * UI_CLASSSTYLE_ 窗口类属性 * TRACE(LPCTSTR pstrFormat, ...) 功能 - 调试信息 参考 - 参考printf * TRACEMSG(UINT uMsg) 功能 - 将windows消息转化成其对应的宏名 uMsg - Windows消息ID 返回值 - 宏名(字符串) * class STRINGorID 功能 - 统一资源ID, 字符串类型和整型统一输出为字符串类型 * class CPoint 描述 - 点 函数 - CPoint(LPARAM lParam) //将消息中lParam转化成点 * class CSize 描述 - 矩形的宽和高 * class CRect 描述 - 矩形区域 函数 - void Empty() //设置left,right,top,bottom为零 void Join(const RECT& rc) //合并两个矩形产生一个包含两个矩形的新的矩形 void ResetOffset() //将矩形移动到left=0,top=0的位置

duilib库分析2.第一篇UIManager

牧云@^-^@ 提交于 2019-11-28 20:41:11
DUiLib 源码分析 ——以UiLib 1.01版为分析目标 ---------------------------------------------------------------------------------- 分析约定: private o------- 私有的成员变量或方法 protect x------- 受保护的成员变量或方法 public +------- 公开的成员变量或方法 ---------------------------------------------------------------------------------- 本篇分析一下源文件 UIManager.h/UIManager.cpp CPaintManagerUI 成员变量 窗体句柄 o---m_hWndPaint 要CPaintManagerUI进行Direct绘图操作的窗体句柄 o---m_hwndTooltip 提示窗口句柄 o---m_hInstance 当前管理的Instance实例 o---m_hResourceInstance 当前管理的资源DLL Instance实例 o---m_pStrResourcePath 当前使用的资源路径 o---m_pStrResourceZip 当前使用的资源压缩包文件全称 ---------------------------

MFC常用基本数据类型

我的梦境 提交于 2019-11-28 18:17:08
ATOM 原子(原子表中的一个字符串的参考) BOOL 布尔变量 BOOLEAN 布尔变量 BYTE 字节( 8 位) CCHAR Windows 字符 CHAR Windows 字符 COLORREF 红、绿、蓝 (RGB) 彩色值 (32 位 ) Const 变量,该变量的值在 执行 期间保持为常量 CRITICAL_SECTION 临界段对象 CTRYID 国名标识符 DLGPROC 指向一个对话框过程的指针 DWORD 双字 (32 位 ) ENHMFENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举增强的元文件记录 ENUMRESLANGPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举资源语言。 ENUMRESNAMEPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举资源名称。 ENUMRESTYPEPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举资源类型。 FARPROC 指向一个回调函数的指针 FLOAT 浮点变量 FMORDER 32 位字体映射值的数组 FONTENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举字体 GOBJENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举图形 设备 接口 (GDI) 对象 HACCEL 加速键表句柄 HANDLE 对象的句柄

MFC常用函数总结

佐手、 提交于 2019-11-28 18:16:56
1、MFC编辑框、静态文本框相关的常用函数 《1》GetDlgItemText(ID ,str) 作用:从对话框中获取文本 第一个参数为要获取的编辑框(或者静态文本框、单选按钮等可以显示内容的控件)的ID,第二个参数为字符串(Cstring 类型)的变量,获取的文本存储在str中。 《2》SetDlgItemText(ID,str) 作用:将字符串显示在控件中 第一个参数为要显示的编辑框(或者静态文本框、单选按钮、组合框等可以显示内容的控件)的ID,第二个参数为字符串(Cstring 类型)的变量,显示的文本存储在str中。如果要显示的变量的类型不是Cstring,则通过Format函数强制转换。 通常还要加一个UpDateData(FALSE)。 《3》UINT nID=GetCheckedRadioButton(IDC1, IDC2); 作用:获取单选框的选项的ID 第一个参数为该组合框中第一个单选按钮的ID,第二个参数为该组合框中最后一个按钮的ID。 《4》CheckRadioButton(IDC1, IDC2, IDC3); 作用:初始化单选按钮 第一个参数为该组合框中第一个单选按钮的ID,第二个参数为该组合框中最后一个按钮的ID,第三个参数为为缺省选项的ID。 《5》m_scrollBar.SetScrollRange(0, 500) ; 作用:设置水平滚动条的取值范围

PHP CURL CURLOPT参数说明(curl_setopt)

删除回忆录丶 提交于 2019-11-28 13:00:06
CURLOPT_RETURNTRANSFER 选项:   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);   如果成功只将结果返回,不自动输出任何内容。   如果失败返回FALSE   curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); 或着不使用这个选项:   如果成功只返回TRUE,自动输出返回的内容。   如果失败返回FALSE    PHP中CURL方法curl_setopt()函数的一些参数 .   bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。   下列选项的值将被作为长整形使用(在option参数中指定): • CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。 • CURLOPT_VERBOSE : 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。 • CURLOPT_HEADER : 如果你想把一个头包含在输出中,设置这个选项为一个非零值。 • CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条

初识API函数

人走茶凉 提交于 2019-11-28 06:11:13
我之前是一个只会编写数值计算的程序的OIer,但我并不甘于这种现状,于是 我 编写了我 的第一个使用API函数的C++程序 , 开发平台是VS2012 : // ConsoleApplication.cpp : 定义控制台应用程序的入口点。 // #include<stdio.h> #include"stdafx.h" #include<Windows.h> int _tmain(int argc, _TCHAR* argv[]) { HWND wnd; wnd=FindWindowA(NULL,"无标题 - 记事本"); SendMessage(wnd,WM_CLOSE,0,0); system("pause"); return 0; } View Code 之前有在看谷夕写的HACK编程实例精讲,第一节有介绍API函数,他的书上用的是hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);在这之前我连如何调用API函数都不知道,尝试过#include<stdafx.h>等等乱七八糟的东西,结果都不行.后来百度了一下,才发现原来是要加#include<windows.h> 明白如何才能可以调用API函数之后,尝试使用书上介绍的OpenDesktop函数,因为我什么都不知道,于是程序我就这么写了: //

Windows 进程间通信

淺唱寂寞╮ 提交于 2019-11-28 02:32:36
3.4 使用 WM_COPYDATA 消息通信 对于少量数据可以用WM_COPYDATA方便地实现通信。由于SendMessage()是阻塞的,只有接收方响应了消息,SendMessage()才能返回,否则一直阻塞。所以,对于大量数据来说,用SendMessage()就容易造成窗口假死。 3.4.1 通过 WM_COPYDATA 消息实现进程间通信的方法 在Win32中,WM_COPYDATA消息主要目的是允许在进程间传递只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。这个函数的原型如下: SendMessage(WM_COPYDATA,wParam,lParam) 其中wParam设置为包含数据的窗口句柄,lParam指向一个COPYDATASTRUCT的结构,其定义为: typedef struct tagCOPYDATASTRUCT{ DWORD dwData; DWORD cbData; PVOID lpData; }COPYDATASTRUCT; 其中dwData为自定义数据, cbData为数据大小, lpData为指向数据的指针。需要注意的是,WM_COPYDATA消息保证发送的数据从原进程复制到目标进程。但是,WM_COPYDATA消息不能发送HDC、HBITMAP之类的东西

VB 函数在串口操作模块的运用

人盡茶涼 提交于 2019-11-27 20:42:50
1.应用 1.1RegOpenKeyEx函数涉及注册表的相关知识,先了解注册表的作用及数据结构 注册表的作用 注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。 具体来说,在启动Windows时,Registry会对照已有硬件配置数据,检测新的硬件信息;系统内核从Registry中选取信息,包括要装入什么设备驱动程序,以及依什么次序装入,内核传送回它自身的信息,例如版权号等;同时设备驱动程序也向Registry传送数据,并从Registry接收装入和配置参数,一个好的设备驱动程序会告诉Registry它在使用什么系统资源,例如硬件中断或DMA通道等,另外,设备驱动程序还要报告所发现的配置数据;为应用程序或硬件的运行提供增加新的配置数据的服务。配合ini文件兼容16位Windows应用程序,当安装—个基于Windows 3.x的应用程序时,应用程序的安装程序Setup像在windows中

记一次文件句柄泄漏导致的崩溃

吃可爱长大的小学妹 提交于 2019-11-27 18:42:15
最近项目上遇到好几个崩溃问题,解决过程有点曲折,在此记做个记录。 项目背景介绍:该项目为语音识别实时分析系统,整套系统架构如下:    接连几次崩溃的是中间的语音流接入系统,崩溃的情况如下: 1、打开文件过多报错,导致系统直接卡死。 2、打开线程过多,导致系统直接崩溃。 3、Jetty容器异步支持bug。 第一次崩溃:打开文件过多   首先在日志中大量的刷屏,因为我们的语音流接入系统只是一个中间转发的服务,这个服务当时是从实时语音分析服务中剥离出来的,当时剥离出来的主要目的是降低实时语音分析服务的带宽压力,所以当出现这个问题后,直接指向的是有网络连接没有释放。   既然确定了排查方向,使用lsof命令,好家伙,该进程直接占了六万多个文件句柄,其中eventpoll占了一万六千多个,打开的pipe有三万三千多个,就这两项就占了近五万个句柄。项目上部署的这套系统最高并发为预计的3000路通话,即使在最高通话并发的情况下,也不可能占用这么多句柄数,所以情况就是有连接没有释放,导致句柄泄漏,并逐渐累积到这个数目,验证这个情况,使用netstat,果然发现大量的连接一直没有释放。      好了,锁定了目标,接下来就是排查代码中没有正确释放的地方。   如最上,一通新通话进来时,我们的语音流接入系统会接入两个语音流并发送给语音识别服务进行识别,在这个过程中,语音流发送是一个持续的过程

Java内存管理机制

时间秒杀一切 提交于 2019-11-27 16:56:12
对于从事 C/C++ 程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的帝皇,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。 对于 Java 程序员来说,在虚拟机的自动内存管理机制的帮助下,不在需要为每一个 new 操作去写配对的 delete/free 代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过也正是因为 Java 程序员把内存控制权交给了 Java 虚拟机,一旦出现内存泄漏和溢出的问题,如果不了解虚拟机怎样使用内存的,那排查错误将会成为一项异常艰难的工作。 1. 什么是 JVM? JVM(Java 虚拟机)是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM 有自己的硬件架构,如处理器、堆栈、寄存器等,还有对应分指令系统。 假如一个程序使用的内存区域是一个货架,那 JVM 就相当于是一个淘宝店铺,它不是真实存在的货架,但它和真实货架一样可以上架和下架商品,而且上架的商品数量也是有限的。 假如货架是在深圳,那 JVM 的平台无关性就相当于是客人可以在各个地方购买你在淘宝上发布的商品,不是只有在深圳才能购买货架上的商品。 2. 什么是 Java 内存模型? Java