我的一片天

我的一片天
posts - 27, comments - 12, trackbacks - 0, articles - 16
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

08 2008 档案

     摘要: Delphi中用临界区线程同步
多线程程序中,如果各个线程要访问同一个资源,如同一个变量
这时就要使用线程同步技术,才不会使线程之间产生冲突和干扰
线程同步有多种办法,使用临界区是其中最简单,也是效率最高的办法(CPU占用时间最少)
使用临界区代码如下:
先声明一个TRTLCriticalSection类型的全局变量
var
MyCs: TRTLCriticalSection;
在程序开始或建立线程之前,初始化
InitializeCriticalSection(MyCs);//初始化临界区
在程序结束或所有线程结束后,删除它
DeleteCriticalSection(MyCs);//删除临界界
再在线程中要同步的地方加入
EnterCriticalSection(MyCs); //进入临界区
try
//程序代码
finally
LeaveCriticalSection(MyCs); //  阅读全文

posted @ 2008-08-23 22:28 xyz 阅读(1059) | 评论 (0)  编辑 |

     摘要: 由于DELPHI不允许unit单元的循环引用,而类的成员在定义时,必须要用interface里的类型,因此要实现类成员的互相引用,必须用变通的方法.

  阅读全文

posted @ 2008-08-18 18:27 xyz 阅读(1436) | 评论 (0)  编辑 |

     摘要:
var
i:integer;
begin
for i:=0 to 10 do
begin
ary[i]:=0;
end;
end;

貌似简单的一段代码,却不简单。调试时,发现i居然是从11开始的,但是如果多声明一个j变量,变成
for i:=0 to 10 do
begin
j:=i;
ary[i]:=0;
end;

在这里j 完全没用,但是调试的时候却能使i正确地等于0.开始以为是程序哪里的内存操作过界造成的,但是即使是一个很简单的程序也是这样,折腾了半天不得其解。


通过搜索,才知道这个DELPHI的优化处理造成的,只要在 Project->options->compile中把Optimization项的沟去掉就一切都正常了。
  阅读全文

posted @ 2008-08-18 16:17 xyz 阅读(844) | 评论 (1)  编辑 |