B
bryantd
Unregistered / Unconfirmed
GUEST, unregistred user!
1、TSortThread类的构造函数:
constructor TSortThread.Create(Box: TPaintBox;
var SortArray: array of Integer);
begin
FBox := Box;
FSortArray := @SortArray;
FSize := High(SortArray) - Low(SortArray) + 1;
//线程结束时释放其占用的资源
FreeOnTerminate := True;
inherited Create(False);
end;
请问inherited Create(False);这句话的意思是“不从TSortThread类的父类TThread中继承构造函数”的意思吗?
2、关于DoVisualSwap和VisualSwap的关系我这样理解正确吗?
DoVisualSwap是实现在TPaintBox中画图的过程,由于DoVisualSwap是线程TSortThread类的成员函数,而且这个函数中用到了VCL的对象TPaintBox,所以这个过程就不能被他所在的类TSortThread直接调用,必须要通过另一个方法中的Synchronize()来控制并发。而这个过程就是VisualSwap。
3、这个执行线程的简单过程能不能给解释一下呢?Slice关键字是什么意思啊?
procedure TSortThread.Execute;
begin
Sort(Slice(FSortArray^, FSize));
end;
4、在三个排序的过程中都有这么一句话: if Terminated then
Exit;这句话起什么作用?
是“线程被中止的时候退出排序过程”的意思吗?
procedure TSelectionSort.Sort(var A: array of Integer);
var
I, J, T: Integer;
begin
for I := Low(A) to High(A) - 1do
for J := High(A)do
wnto I + 1do
if A > A[J] then
begin
VisualSwap(A, A[J], I, J);
T := A;
A := A[J];
A[J] := T;
if Terminated then
Exit;
end;
end;
5、在主窗体的单元中的那个初始化随机数组的过程中
procedure TThreadSortForm.RandomizeArrays;
var
I: Integer;
begin
if not ArraysRandom then
begin
Randomize;
for I := Low(BubbleSortArray) to High(BubbleSortArray)do
BubbleSortArray := Random(170);
SelectionSortArray := BubbleSortArray;
QuickSortArray := BubbleSortArray;
ArraysRandom := True;
//PaintArray(BubbleSortBox,BubbleSortArray);
//PaintArray(SelectionSortBox,SelectionSortArray);
//PaintArray(QuickSortBox,QuickSortArray);
Repaint;
end;
end;
初始化完成后,那个Repaint的意思应该是在三个PaintBox控件上画出三个数组的初始化状态对吧?但是程序中没找到定义Repaint过程的地方啊?怎么莫名其妙地就蹦出来了?
6、关于开始排序按钮
procedure TThreadSortForm.StartBtnClick(Sender: TObject);
begin
RandomizeArrays;
ThreadsRunning := 3;
with TBubbleSort.Create(BubbleSortBox, BubbleSortArray)do
OnTerminate := ThreadDone;
with TSelectionSort.Create(SelectionSortBox, SelectionSortArray)do
OnTerminate := ThreadDone;
with TQuickSort.Create(QuickSortBox, QuickSortArray)do
OnTerminate := ThreadDone;
StartBtn.Enabled := False;
end;
这个句子with TBubbleSort.Create(BubbleSortBox, BubbleSortArray)do
OnTerminate := ThreadDone;
我大概能猜出来是执行TBubbleSort类的构造函数没错,do OnTerminate := ThreadDone;我也能猜出来,大概就是当线程结束的时候执行ThreadDone这个过程。
但是这样写我觉得挺别扭的,TBubbleSort的对象创建了吗?怎么调用这个对象呢?
大概就是这些问题了,可能有点长,希望给为帮忙看看!!谢谢!!
constructor TSortThread.Create(Box: TPaintBox;
var SortArray: array of Integer);
begin
FBox := Box;
FSortArray := @SortArray;
FSize := High(SortArray) - Low(SortArray) + 1;
//线程结束时释放其占用的资源
FreeOnTerminate := True;
inherited Create(False);
end;
请问inherited Create(False);这句话的意思是“不从TSortThread类的父类TThread中继承构造函数”的意思吗?
2、关于DoVisualSwap和VisualSwap的关系我这样理解正确吗?
DoVisualSwap是实现在TPaintBox中画图的过程,由于DoVisualSwap是线程TSortThread类的成员函数,而且这个函数中用到了VCL的对象TPaintBox,所以这个过程就不能被他所在的类TSortThread直接调用,必须要通过另一个方法中的Synchronize()来控制并发。而这个过程就是VisualSwap。
3、这个执行线程的简单过程能不能给解释一下呢?Slice关键字是什么意思啊?
procedure TSortThread.Execute;
begin
Sort(Slice(FSortArray^, FSize));
end;
4、在三个排序的过程中都有这么一句话: if Terminated then
Exit;这句话起什么作用?
是“线程被中止的时候退出排序过程”的意思吗?
procedure TSelectionSort.Sort(var A: array of Integer);
var
I, J, T: Integer;
begin
for I := Low(A) to High(A) - 1do
for J := High(A)do
wnto I + 1do
if A > A[J] then
begin
VisualSwap(A, A[J], I, J);
T := A;
A := A[J];
A[J] := T;
if Terminated then
Exit;
end;
end;
5、在主窗体的单元中的那个初始化随机数组的过程中
procedure TThreadSortForm.RandomizeArrays;
var
I: Integer;
begin
if not ArraysRandom then
begin
Randomize;
for I := Low(BubbleSortArray) to High(BubbleSortArray)do
BubbleSortArray := Random(170);
SelectionSortArray := BubbleSortArray;
QuickSortArray := BubbleSortArray;
ArraysRandom := True;
//PaintArray(BubbleSortBox,BubbleSortArray);
//PaintArray(SelectionSortBox,SelectionSortArray);
//PaintArray(QuickSortBox,QuickSortArray);
Repaint;
end;
end;
初始化完成后,那个Repaint的意思应该是在三个PaintBox控件上画出三个数组的初始化状态对吧?但是程序中没找到定义Repaint过程的地方啊?怎么莫名其妙地就蹦出来了?
6、关于开始排序按钮
procedure TThreadSortForm.StartBtnClick(Sender: TObject);
begin
RandomizeArrays;
ThreadsRunning := 3;
with TBubbleSort.Create(BubbleSortBox, BubbleSortArray)do
OnTerminate := ThreadDone;
with TSelectionSort.Create(SelectionSortBox, SelectionSortArray)do
OnTerminate := ThreadDone;
with TQuickSort.Create(QuickSortBox, QuickSortArray)do
OnTerminate := ThreadDone;
StartBtn.Enabled := False;
end;
这个句子with TBubbleSort.Create(BubbleSortBox, BubbleSortArray)do
OnTerminate := ThreadDone;
我大概能猜出来是执行TBubbleSort类的构造函数没错,do OnTerminate := ThreadDone;我也能猜出来,大概就是当线程结束的时候执行ThreadDone这个过程。
但是这样写我觉得挺别扭的,TBubbleSort的对象创建了吗?怎么调用这个对象呢?
大概就是这些问题了,可能有点长,希望给为帮忙看看!!谢谢!!