循环多线程通信!(100分)

  • 主题发起人 主题发起人 smhp
  • 开始时间 开始时间
jiangyiquan同志:真是感谢你,不过我还有些迷惑:EA、EB、ThrdA、ThrdB不用释放吗?我对DELPHI中变量空间的回收比较
迷惑!如果用户没有按“END”按纽就关闭程序,线程会出问题吗?系统会自动清理吗?
 
EA、 EB当然要释放,EA.Free就是释放。 如果需要经常判断EA的值,如 EA = XX 等,
最好用 FreeAndNil(EA) , 因为对象Free后,并不自动置为Nil, 而FreeAndNil在对象释放后,
把对象置为nil.
ThrdA、ThrdB也要释放,请注意 ThrdA.FreeOnTerminate := True;
就是设置当线程结束时,
自动释放对象ThrdA的空间。
另外要特别注意的是,程序结束前,必须把所有运行的子线程结束,否则程序退出时容易产生异常,
尤其是在98下(蓝屏)。Dlphi中的线程对象TThread与Windows中的线程对象并不是一个概念。
一点体会,与你共享。
 
to :教父
你的代码我运行过,发现单部的情况确实可以互相通行,而实际上只完成了一次,a线程
完成后挂气,通知b,结果b完成后并没有乡想象中那样,唤醒a ....
 
不会啊,在
procedure TBThread.Execute;
begin
while not Terminateddo
begin
Synchronize(ShowArrayVal);
PostMessage(Form1.Handle,UM_RESUMEA,0,0);//注意这里不能用SendMessage
Suspend;
end;
end;
如果用了SendMessage倒是会出现那个问题,上面那段代码我测试过的,应该不会有问题。
 
结帐了,谢谢各位!
 
后退
顶部