摘要: 类 Create 了就要 Free; 但 TThread(的子类) 有特殊性, 很多时候我们不能确定新建的线程什么时候执行完(也就是什么时候该释放); 如果线程执行完毕自己知道释放就好了, 所以 TThread 给了一个布尔属性 FreeOnTerminate, 如果为 True, 线程执行完毕后就 阅读全文
posted @ 2015-04-24 15:24 xumenger 阅读(6067) 评论(0) 推荐(1) 编辑
摘要: 首先说明一下:同一个动态库(DLL)被多个的程序加载的话,那么将会在每次加载的时候都会重新分配新的独立的内存空间,绝对不是共用一个,所以当一个DLL被多次加载的时候,其会在内存中“复制”多份,不会互相之间 产生影响。 加载DLL有两种方式:隐式和显式。下面就以刚创建的DLL为例,来介绍两种方式 一、 阅读全文
posted @ 2015-04-24 11:28 xumenger 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 下面是在Delphi中创建一个DLL的全过程,你将看到怎样创建一个接口单元,使之可以被其他的应用程序访问。并且将学会怎么把Delphi的窗体加入DLL中。 一、数美分:一个简单的DLL 下面是包含一个例程的DLL例子。该例程是将以美分计算的货币换算成五分镍币、一角硬币的数目。 1.一个简单的DLL 阅读全文
posted @ 2015-04-24 11:25 xumenger 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 使用DLL有若干理由,其中有一些前面提到过的。大体说来,使用动态链接库可以共享代码、系统资源,可以隐藏实现的代码或底层的系统例程、设计自定义控件 一、共享代码、资源和数据 前面已经提到,共享代码是创建动态链接库的主要目的所在。但与单元的代码共享不同,DLL的代码可以被任何Windows 应用程序共享 阅读全文
posted @ 2015-04-24 10:38 xumenger 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 静态连接 静态链接是指Delphi 编译器把要调用的函数和过程编译成可执行代码。函数的代码可存留在应用程序的 .dpr文件或一单元中。当链接用户的应用程序时,这些函数与过程便成为最终的可执行文件的一部分。也就是说,函数和过程都在程序的.exe文件中 程序运行时,函数和过程随程序一起调入内存,它们的位 阅读全文
posted @ 2015-04-24 09:58 xumenger 阅读(484) 评论(0) 推荐(0) 编辑
摘要: DLL(动态链接库)是程序模块,它包括代码、数据或资源,能够被其他的Windows 应用程序共享。DLL的主要特点之一是应用程序可以在运行时调入代码执行,而不是在编译时链接代码,因此,多个应用程序可以共享同一个DLL的代码。 事实上,文件 Kernel32.dll、User32.dll、GDI32. 阅读全文
posted @ 2015-04-24 09:39 xumenger 阅读(651) 评论(0) 推荐(0) 编辑
摘要: 参考:http://www.cnblogs.com/zhangzhifeng/archive/2011/12/01/2270267.html 一、ini文件的结构 ini文件允许有多个节点,每个节点有允许有多个关键字,“=”后面是该关键字的值(类型有三种:字符串、整型数值和布尔值。其中字符串存储在 阅读全文
posted @ 2015-04-23 17:34 xumenger 阅读(1289) 评论(0) 推荐(0) 编辑
摘要: 当函数(或过程)A定义在函数(或过程)B之前,那么函数B就可以调用函数A,并且编译成功,例如下面的 procedure TForm1.btn1Click(Sender: TObject); 和 function showstr: string; 当函数(或过程)A定义在函数(或过程)B之后,那么如果 阅读全文
posted @ 2015-04-23 17:08 xumenger 阅读(4733) 评论(0) 推荐(0) 编辑
摘要: 在C/C++等语言中,函数执行到 return 部分之后,将立即停止函数的执行,并返回值 但是在Delphi中不同 函数中,执行到result时,并不同于比如 C/C++ 中的 return,跳出函数,而是会继续执行下去,直到函数结束 下列代码: 而且在上面的函数中,最终的返回值是最后一个Resul 阅读全文
posted @ 2015-04-23 16:52 xumenger 阅读(1916) 评论(0) 推荐(0) 编辑
摘要: 当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源。 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数。当然,在整个文件调入内存之前,统计它的计数是没有意义的。但是,由于每个操作都有自己的线程,操作系统会把两个线程当做是互不相干的任务分别执行,这样 阅读全文
posted @ 2015-04-23 15:20 xumenger 阅读(7136) 评论(1) 推荐(5) 编辑
摘要: 尽管多线程能够解决许多问题,但是同时它又给我们带来了很多的问题。其中主要的问题就是:对全局变量或句柄这样的全局资源如何访问?另外,当必须确保一个线程中的某些事件要在另一个线程中的其他时间之前(或之后)发生时,该怎么办?这里将讲解通过使用由 Delphi提供的线程局部存储和 A P I为线程提供同步的 阅读全文
posted @ 2015-04-23 15:13 xumenger 阅读(2698) 评论(0) 推荐(1) 编辑
摘要: 接着上文介绍TThread。 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与Delphi中的事件有所不同。从本质上讲,Event其实就相当于一个全局的布尔变量。它有两个赋值操作:S 阅读全文
posted @ 2015-04-23 11:30 xumenger 阅读(2616) 评论(0) 推荐(0) 编辑
摘要: 参考:http://www.cnblogs.com/rogee/archive/2010/09/20/1832053.html Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数的Delphi书籍都有讲到,但是基本上都是对TThread类的几个成员作一简单介绍,再说明一个 阅读全文
posted @ 2015-04-23 09:21 xumenger 阅读(2659) 评论(0) 推荐(0) 编辑
摘要: 紧接着上篇博客讲解的内容: 将Char型数组转换为string类型还有下面的这种方法 但是我在测试的时候遇到了一些问题,并在下面进行了解释和总结 先说出我的总结 其实我们在学习编程的时候(比如我之前学习C的时候),一直有书或者博客上有建议说声明一个变量之后,一定要初始化,否则可能出现一些意想不到的错 阅读全文
posted @ 2015-04-22 14:37 xumenger 阅读(17127) 评论(0) 推荐(3) 编辑
摘要: 参考:http://my.oschina.net/kavensu/blog/193719 以下的各种方法都是我在Delphi 6的环境下测试成功的,可能根据你的开发环境、不同的上下文语境……有一些可能会出现问题,以自己在使用的时候进行具体的测试为准 Char数组和String的相互转换的另一种方法和 阅读全文
posted @ 2015-04-22 14:23 xumenger 阅读(1082) 评论(0) 推荐(0) 编辑
摘要: 参考:http://www.cnblogs.com/pchmonster/archive/2011/12/16/2290034.html 结合这个博客一起学习:http://www.cnblogs.com/xumenger/p/4427957.html 在实际编程中,这些操作会经常用到的。开始你不用 阅读全文
posted @ 2015-04-21 11:15 xumenger 阅读(13048) 评论(0) 推荐(1) 编辑
摘要: 在16位时代,当我们在Windows3.x下编程时,经常会用到GetTickCount()或者timeGetTime()来判断一段代码的执行时间。示例如下 在多线程环境下,这是很困难的,因为在执行程序中间,操作系统可能会把CPU时间片分给别的进程。所以,用上述方法测出的时间并不真实。 为了解决这个问 阅读全文
posted @ 2015-04-20 09:54 xumenger 阅读(868) 评论(0) 推荐(0) 编辑
摘要: 当线程对象的Execute()执行完毕,我们就认为此线程终止了。这时候,它会调用Delphi的一个标准例程EndThread(),这个例程再调用API函数ExitThread()。由ExitThread()来清除线程所占用的栈。 当结束使用TThread对象时,应该确保已经把这个Delphi对象从内 阅读全文
posted @ 2015-04-20 09:17 xumenger 阅读(7421) 评论(0) 推荐(0) 编辑
摘要: TThread在Classes单元里的声明如下 先说一下TThread的Create的参数 当TThread的Create()被调用的时候,需要传递一个布尔型的参数CreateSuspended。如果把这个参数设为False,那么当调用Create()之后,Execute()会被自动调用,也就是自动 阅读全文
posted @ 2015-04-20 08:57 xumenger 阅读(5991) 评论(0) 推荐(1) 编辑
摘要: 五、类是一种对数据和操作高度的封装机制 1)数据封装 如上面的代码,我们就用了一个过程SetName和一个函数GetName对私有变量FName进行完全的封装。我们要对FName进行操作就只要这样: 2)操作封装 如上的代码通过类的多态性机制把除法分别处理成整数型和非整数型,又通过异常处理去处理除数 阅读全文
posted @ 2015-04-18 17:02 xumenger 阅读(397) 评论(0) 推荐(0) 编辑

业精于勤而荒于嬉,行成于思而毁于随

十万小时的反复练习