C
crazycock
Unregistered / Unconfirmed
GUEST, unregistred user!
A=class(TObject)<br>public<br> procedure Print(str:String);<br>end;<br><br>假设有一个自定义的类A,它的Print操作比较耗时,调用者可能需要中途暂停或者cancel,还有可能需要Resume,所以考虑把Print做到线程里面。现在问题出来了。。。考虑下面两种解决方式。<br>(1)由调用者创建一个线程,在线程里实例化A,在线程里执行A.Print,这样就不会影响调用者的工作了,需要暂停和继续的时候,对线程挂起和继续即可。但是需要访问这个实例化A的时候,就比较麻烦了,因为对象在线程里面。<br>(2)调用者实例化一个A,然后A.Print,在A.Print的内部,根据环境情况,创建一个内部的线程,执行相关操作(这个线程的Proc可以是类A内部的一个成员函数么?)。得到这个线程的句柄后就好办了,可以在A.Pause把线程挂起,也可以在A.Stop里面把线程停止。不会影响到调用者的运行。但是,调用者对A的访问一定要有相关的排斥,注意不要破坏A内部线程运行所需的变量。<br><br>虽然(2)这种方法对于软件架构设计来说不是很好,但是我觉得总比(1)要强,而且使用上也比较方便。<br><br>不知道大家对于这样的情况如何设计的,欢迎指教。