多线程问题(DELPHI6中DEMO的关于thread的那个例子)(100分)

  • 主题发起人 主题发起人 lp414
  • 开始时间 开始时间
L

lp414

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi6中有个多线程的例子(和Delphi5一样的)
其中ThreadCount为什么只能是3?我换成4,线程好像一直进行下去,button.enable:=true;
这句一直没有执行。
如果把它改为2,图形没有变换完,线程就结束了。
如果把它改成3的倍数,比如6,线程好像也一直在进行。
不知道各位对此有什么看法?
 
看看去
[:)]
 
咦,还没看完吗?
 
说的不清不楚的。
 
无ThreadCount , 应该是ThreadsRunning。
对创建的三个线程对象(TThread),ThreadsRunning是公共的,每个线程结束时执行Dec(ThreadsRunning);
当ThreadsRunning = 0 时,StartBtn.Enabled := True;
当ThreadsRunning 设为 2,第2个线程结束时,StartBtn.Enabled := True
如果ThreadsRunning 开始时大于3,只有三个线程,所以三个线程都结束时,ThreadsRunning 不能
被置为0,StartBtn.Enabled := True不被执行。
这一行比较关键 with ...do
OnTerminate := ThreadDone;
 
同意jiangyiquan
在这里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;
去掉其中一个,你把它改成2,试试看。
 
后退
顶部