句柄

使用 C#Builder Architect 为 DB2 UDB 构建模型驱动的 Windows 应用程序(第二部分)

微笑、不失礼 提交于 2019-11-26 21:47:29
使用 C#Builder Architect 为 DB2 UDB 构建模型驱动的 Windows 应用程序 Jeremy McGee ( jeremy@mcgee.demon.co.uk ) 独立 IT 顾问 2004 年 4 月 摘錄自 IBM公司網站 > DB2開發者園地 > 本文 简介 Borland® C#Builder TM Architect 扩展了 C#Builder 的开发能力,使之能进行模型驱动的开发。通过自动实现部分统一建模语言(Unified Modeling Language,UML)软件模型,节省了业务逻辑编码的时间。 在 第一篇文章 中,我们看到 C#Builder Architect 中的 ECO TM 设计器和运行库框架是如何可以帮助快速实现应用程序的。这篇文章中,我将扩展该系列文章第一部分中所创建的简单应用程序,以使用户可以操纵我们创建的其他对象类。您还将看到如何使用通过关联获得的数据完整性选项。 可从 Borland Web 站点 获得 C#Builder Architect 的试用版。 添加人员 我们的 UML 图包括两种人员列表,每种都与我们在窗体上放置的 DataGrid 中的部门(department)相关联。接下来,您将在该窗体上添加两个网格,并创建一个简单的用户界面以便用户输入个人信息。 再向主 WinForm 添加两个网格

ADB管道通信

被刻印的时光 ゝ 提交于 2019-11-26 16:02:33
打開剪貼板: OpenClipboard 返回值為BOOL,成功返回非0,若失敗或剪貼板被佔用,返回0. CloseClipboard:關閉 EmptyClipboard:清空 前一個程序調用關閉,後一個程序調用清空后,打開剪貼板的當前窗口才擁有剪貼板。 SetClipboardData向剪貼板中防止數據。 參數: nFormat:剪貼板格式 hMem:具有指定格式的數據的句柄 ------------------------------------------------------------------- 延遲提交技術 ------------- 第一次調用SetClipboardData時,將其hMem參數設置為NULL,在剪貼板上以指定的剪貼板格式放置一個 空的剪貼板數據塊。然後直到其他進程需要數據或自身進程需要終止運行時再次調用SetClipboardData函數,這次 才真正提交數據(不需再調用OpenClipboard和EmptyClipboard) IsClipboardFormatAvailable(format)//檢測剪貼板上是否包含了參數format指定的格式的數據 GetClipboardData(CF_TEXT);//從剪貼板上獲得指定數據 --------------------------------------------------------

用PHP编写PDF文档生成器

 ̄綄美尐妖づ 提交于 2019-11-26 13:45:01
PHP一个最大的优点就是它对新技术的支持非常容易,这种语言的可扩展性使得开发人员能够很方便地添加新的模块,而且遍布世界的技术团体的支持和众多扩展模块的支持使得PHP已经成为功能最齐全的Web编程语言之 一。目前可得到的扩展模块已经能够使开发人员执行IMAP和POP3操作,可以动态产生图象和Shockwave Flash动画,进行信用卡验证,敏感数据的加密解密,还能够解析XML格式的数据。但这还不是全部,现在,又有一个新的模块可以与PHP进行绑定了,那就是PDFLib扩展模块,它能够让开发人员动态产生PDF(Adobe Portable Document Format)格式的文件,下面就先看看如何在PHP里使用这个模块。 为了能够使PHP具有操作PDF格式文档的能力,你必须先在你的系统里安装PDFLib扩展库,如果你使用的是Lunix系统,你可以从 http://www.pdflib.com/pdflib/index.html 下载一个并进行编译,如果你使用的是Windows系统,那就更简单了,只需要下载一个编译好的PDFLib库,然后在PHP的配置文件里把相应的行的注释去掉即可。 extension=php_pdf.dll 如果是动态装载,也可以是参照下面的命令: dl("php_pdf.dll"); 此外,你还必须有一个Adobe Acrobat PDF阅读器,用来浏览PDF格式

UVM消息打印机制之uvm_report (二)

萝らか妹 提交于 2019-11-26 05:34:56
上一个文章中讲解了uvm_report_enable。当enable了,就会执行真正的message的执行方法,还是以`uvm_error宏讲解 `define uvm_error(ID, MSG) \ begin \ if (uvm_report_enabled(UVM_NONE,UVM_ERROR,ID)) \ uvm_report_error (ID, MSG, UVM_NONE, `uvm_file, `uvm_line, "", 1); \ end 核心是方法uvm_report_error,下面是调用方法的执行顺序 uvm_report_object.uvm_report_error(*)和方法uvm_report_object.uvm_report(*)仅仅是参数的传递 uvm_report_message.set_message(*)在uvm_report方法中例化一个uvm_report_message句柄,然后设置这个对象的一些属性,主要是uvm_report传递的一些参数 uvm_report_handle.process_report_messaged(*)调用组件中uvm_report_handle类型的句柄m_rh的方法,主要是设置message别的属性 uvm_report_server.process_report_message(*

如何自动检查内存泄漏和句柄耗尽

☆樱花仙子☆ 提交于 2019-11-26 01:42:18
如何自动检查内存泄漏和句柄耗尽 1. 背景 当程序的子模块数量和规模扩大之后,在开发阶段,系统长时间允许后经常会碰到下面一些bug: 内存泄漏。随着时间允许,系统可用的内存越来越少,最后kernel 出现oom 错误; 文件句柄耗尽。程序可以打开的文件、套接字、管道越来越少,最后出错在用完了最后一个可用句柄的代码附近; 死锁。线程拥有一把锁A,正在申请锁B;但在此时锁B被另外一个线程拥有,且那个线程又在申请锁A。形成一个循环等待、占用且不可释放的状态。 调试这些问题,当然可以从代码流程和逻辑出发,结合ps/gdb/proc/core等命令和信息,一步步挖出root cause。但一般要求对代码、线程关系和相关命令比较熟悉,一般耗时较长。所以,一般大型公司都封装了标准的glibc,做了一个wraaper,然后再wrapper里面加入了对上面调试的支持。还有的可采用专业内存泄漏等检查工具,去做代码检测。那么,对于咱工程师而言,能否能自己设计并实现一个资源检查工具呢? 2. 原理 针对上面的三个例子使用中的资源,我们可以归纳成两类:数量有限的共享资源,比如上面空间有限的内存和数量有限的文件句柄;需要独占的互斥资源,比如上面例子中提到的锁。 下面就分别针对这两种情况,分别展开分析。 2.1 对共享资管的检查 共享资源的特点是:总量有限,通过申请接口获得,使用完了之后通过释放接口归还

tcp socket文件句柄泄漏

拈花ヽ惹草 提交于 2019-11-25 23:48:55
tcp socket文件句柄泄漏 今天发现有台redis机器上出现socket个数告警,这是很奇怪的现象。因为一台redis服务器上就部署了几个redis实例,打开的端口应该是有限。 1、netstat显示的tcp连接数正常 netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'` TIME_WAIT 221 ESTABLISHED 103 netstat -nat |wc -l 368 建立的tcp连接数并不是很多。 ss -s显示大量的closed连接 ss -s Total: 158211 (kernel 158355) TCP: 157740 (estab 103, closed 157624, orphaned 0, synrecv 0, timewait 173/0), ports 203 Transport Total IP IPv6 158355 - - RAW 0 0 0 UDP 9 6 3 TCP 116 80 36 INET 125 86 39 FRAG 0 0 0 closed 157624 而我的系统监控取值方法是: cat /proc/net/sockstat | grep sockets | awk '{print $3}'