‘程序设计’ 分类的存档
今天看了CnPack的线程池的代码,终于明白了线程池的基本实现方法,其实蛮落伍的,哈哈,只是没有感觉的那么神秘。 1.创建一个纯虚类(线程类),来确认任务,要创建的线程要继承此类,以实现接口调用。 2.创建一个纯虚类(资料类),记录所有的任务的各种参数,比如:实现FTP的IP、端口等,然后每次个线程类对应一个资料 3.向线程池要求任务事,判断此任务的资料是否跟某个已完成任务资料是否相同,如果相同则重用。 嘿嘿,也许我说的不是很明白,大体意思就是这样了。蛮容易理解的。呵呵,看来是“听起来神秘,做起来也很落伍的”。 今天发现原来线程池的处理功能,原来使用的是回调,再追加请求时激活回调函数,进行线程处理,为什么不是直接处理呢? 将具体处理与他自己的虚拟类进行分开?这样不影响正常的数据处理类的逻辑性?那为什么不是将处理程序写到线程的Execute里呢?这样看起来应该更合理一点嘛。弄得好复杂呀…没有感觉的那样智能。 唉,自己真是没有耐心呀。原来线程的Execute还是存在的,原来他的父类里面有很多代码要在线程真正开始执行前后为线程池进行准备工作,真正的执行程序被夹在当中了,所以只能用回调进行处理来在中间执行真正的业务逻辑,看来以后学习还是要很恨虚心的。
名称 类型 说明 ———————————————————————————- Abort 函数 引起放弃的意外处理 Abs 函数 绝对值函数 AddExitProc 函数 将一过程添加到运行时库的结束过程表中 Addr 函数 返回指定对象的地址 AdjustLineBreaks 函数 将给定字符串的行分隔符调整为CR/LF序列 Align 属性 使控件位于窗口某部分 Alignment 属性 控件标签的文字位置 AllocMem 函数 在堆栈上分配给定大小的块 AllowGrayed 属性 允许一个灰度选择 AnsiCompareStr 函数 比较字符串(区分大小写) AnsiCompareText 函数 比较字符串(不区分大小写) AnsiLowerCase 函数 将字符转换为小写 AnsiUpperCase 函数 将字符转换为大写
转(智在居士草堂) 先来聊聊重载问题(也叫超载,总之是那个Overload)吧。在同一个类中,出现多个同名的方法的现象就是Overload。联系起上面提到的兄弟俩,我想这更好理解。他们从外观上是相似的,不同的是某些“参数”,类型上可能各异或是个数上不同。 在Delphi中,所有方法都默认是静态的,便于编译器和链接器解析调用。为实现超载,要在方法明的后面加上关键字overload,不然会产生报错。先看个小例子吧:
字符/ 意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。 例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示 匹配一个单词的分界线。 或者: 对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。 例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配’a*’。字符^ 意义:表示匹配的字符必须在最前边。 例如:/^A/不匹配\”an A,\”中的’A’,但匹配\”An A.\”中最前面的’A’。
( 之一) Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了。然而这并不是多线程编程的全部,我写此文的目的在于对此作一个补充。 线程本质上是进程中一段并发运行的代码。一个进程至少有一个线程,即所谓的主线程。同时还可以有多个子线程。当一个进程中用到超过一个线程时,就是所谓的“多线程”。
UNIX Socket Programming基本上是一本书名。Socket programming其实需要相当程度的基础,我不想在这里包山包海地,如果您需要彻底研究,可以买这本书来看。在此我想提供一些简单的Server/Client两端的简单写法,让你有个起点,做为进一步研究的基础。很多涉及较复杂的内容的,我在这里便不详细说明,您可以照本宣科,照抄着用,稍微熟悉时,再细细研究。 inetd提供被动式的伺服器服务,也就是伺服器是被使用端所启动,平时则无须存在。例如,ftp, telnetd, pop3,imap, auth等等,这些服务没有人使用时,无须启动。此外,inetd将socket转换成stdin/stdout,因而使得网路服务程式设计大大简化,您可以只用printf及fgets便可完成处理很复杂的网路协定。
