有5个线程,可程序关闭时还是超级慢(10分)

  • 主题发起人 主题发起人 angel725
  • 开始时间 开始时间
A

angel725

Unregistered / Unconfirmed
GUEST, unregistred user!
type <br> &nbsp;tTread1=class(TThread)<br> &nbsp;private<br> &nbsp;protected<br> &nbsp; &nbsp;procedure Execute;override;<br>end;<br>procedure TThead1.excute;<br>begin<br> &nbsp;调用函数1<br>end;<br>再用相同方定义第二个线程对象<br> &nbsp;然后在onFormcreate中<br> &nbsp;Thread1:=tthread1.Create(true);<br> &nbsp;Thread2:=tthread2.Create(true);<br>然后再在Ontimertimer中<br> &nbsp;Thead1.Resume();<br> &nbsp;Thead2.Resume();<br>用这个方法,在form1的oncreste事件中创建5个线程,<br>在onclose中分别对它们free<br>可是程序关闭时还是超级慢,<br><br>怎么回事,有什么方法在关闭时能快些
 
帮顶,我是小小虾,也想学学
 
释放需要时间吧
 
可以先把窗口隐藏了,再等待释放,看起来很快。<br><br>procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>begin<br> &nbsp;Hide;<br> &nbsp;CanClose:=True;<br>end;
 
晕,这也算个方法,,<br>还有别的吗?能真正解决的
 
楼上的楼上的办法 真是 比较聪明啊 。<br><br>现在发觉自己太会钻进死胡同里了。 呵呵
 
首先确定你在onclose里释放的时候,线程是否已经terminate了。<br>如果是因为没有terminate,你可以强行终止线程<br>TerminateThread(Thread1.Handle);<br>Thread1.WaitFor;<br>Thread1.Free;<br>这样速度会很快。
 
TerminateThread(Thread1.Handle);<br>错误了<br>[Error] GGold.pas(89): Not enough actual parameters<br><br>少了一个参数,我不知道那个参数该怎么写
 
这些线程需要释放资源啊,所以肯定慢撒,你可以采用一个办法,那就是在线程的exceute中加入一个event来处理,当程序关闭的时候,就setevent,然后线程里面的就用waitforsignleobject来处理,只要得到这个事件,马上就break。这样肯定快,我一般都是这样处理的。
 
TerminateThread,TerminateProcess[:D]
 
TerminateThread这个函数少用,在microsoft的msdn上也有说明,在万不得已的情况下,不要使用这个函数。
 
用application.terminate可以解决问题。甚用``````
 
那就是在线程的exceute中加入一个event来处理,当程序关闭的时候,就setevent,然后线程里面的就用waitforsignleobject来处理,只要得到这个事件,马上就break。这样肯定快,我一般都是这样处理的。<br><br>是怎么写的,有小小的例子吗?<br>没写过
 
to angel725:<br> 希望看见CreateEvent类似代码...
 
后退
顶部