花落花又开:一个result的例子和又两个小问题(33分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
1)敏哥给的例子有
function ForTest:integer;
var
pf:function:integer;
------------pf:function:integer???不明白这样的语法
2)技术内幕P118:
function ThreadFunc1(P: Pointer): LongInt
stdcall;
var
i, j: Integer;
S: string;
begin
Form1.ListBox1.Items.Clear;

for j := 0 to TotalCount do begin
if (CritSects) then EnterCriticalSection(Sect1);
Sleep(3);
Inc(GlobalData, 3);
i := GlobalData - 3;
S := Format('Information: %d', );
SendMessage(Form1.ListBox1.Handle, lb_AddString, 0, LongInt(S));
Dec(GlobalData, 3);
if (CritSects) then LeaveCriticalSection(Sect1);
end;
Result := 0;
end;
-------本来大家讲那么多,模糊知道点(甚至还以为自己明白了。..),可这里
Result:=0 在程序里的执行后什么结果?线程又不能跟踪
运行 只见form1.listbox.item为100(初值)
代码在chap05 Critsect程序里
 
1)哈哈,简单.这相当于:
type TFunc=function:integer;
var pf:TFunc
pf是一个无参函数变量
2) SendMessage(Form1.ListBox1.Handle, lb_AddString, 0, LongInt(S)
和if (CritSects) then LeaveCriticalSection(Sect1) 有猫腻,请仔细看看
这个有点象回调函数,与Api似乎有关.因为这是个函数,必须有返回值,而程序只与
函数的处理过程有关,对返回值并不关系,所以对它赋0只是语法的需要
 
1. 相当于定义: function pf:integer;
但由于在函数内部不允许定义函数, 故定义成函数变量.

2. 看上去应该是对listbox进行了类似listbox1.item.addstring('Information: xxx')
的操作. Result:=0是为了编译的时候不出错.
从函数名来看这应该是在一个线程中调用的函数, 故需要在for循环中sleep(3);
让出CPU资源, 两个IF语句要根据上下文来看的, 猜测CritSects应该是个Boolean类型
的变量, 在其他线程中会有设置.
 
1.
pf是与ForTest函数赋值兼容的一个过程变量,如 Kang 前面所述。

一般是先声明类型标识符,再定义变量。但也可以把类型声明和变量定义“合二为
一”,即:把类型声明中的“=”换成“:”,然后放到变量后面。除了class的实
例,所有的变量都可以采用这种“合二为一”的定义方式。对于一个单独的变量使用
“合二为一”定义方式可以少敲几次键盘,看起来也清楚;但在定义同类型的一批变
量时,还是分成两步走好。

Object Pascal是根据类型标识符来区分数据类型的,用“合二为一”方式定义
变量的同时也创建了一个匿名类型,它不同于任何一种类型,具有唯一性。故下列代
码是不能通过编译的:

var
Int1:array[1..10]of integer;
Int2:array[1..10]of integer;

begin

Int1 := Int2; //此句编译错误,因为只有类型相同的数组才能相互赋值。

end;

2.
ThreadFunc1是由CreateThread(Win32 API)调用的线程函数,这个回调函数的原型
如下所示:

DWORD WINAPI ThreadFunc(LPVOID lpvThreadParm)
{
DWORD dwResult = 0;
.
.
.
return(dwResult);
}
函数的返回值可以调用GetExitCodeThread得到,执行成功则返回值为0。
在《Delphi4编程技术内幕》示例函数ThreadFunc1中的返回值是可有可无的,实际上
去掉“Result:=0”这句,程序任能正常运行。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
686
import
I
I
回复
0
查看
843
import
I
后退
顶部