控件?线程?这种情况如何设计更合理。 ( 积分: 300 )

  • 主题发起人 主题发起人 crazycock
  • 开始时间 开始时间
C

crazycock

Unregistered / Unconfirmed
GUEST, unregistred user!
A=class(TObject)<br>public<br>&nbsp;&nbsp;procedure&nbsp;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>不知道大家对于这样的情况如何设计的,欢迎指教。
 
问题在于A.Print操作耗时,&nbsp;CLASS&nbsp;A又不耗时,&nbsp;方法2是可行方法
 
这个线程的Proc可以是类A内部的一个成员函数么?
 
如果用A类包含一个TThread类,肯定是类的成员函数<br>如果用WINAPI创建线程,线程回调函数只能是普通函数<br>多个实例共用一个普通函数,要用用户参数区分实例
 
这个线程的Proc可以是类A内部的一个成员函数么?&nbsp;&nbsp;&nbsp;是可以的.<br>还是把线程对象作为类A的一个私有成员好吧!&nbsp;我个人认为
 
回kk2000:线程的Proc不能是A的一个成员函数,试过了。VC下开发时候也是如此。<br>回ysai:&quot;多个实例共用一个普通函数,要用用户参数区分实例&quot;,我的理解不是这样的,不同的线程有自己的地址空间,函数内部的变量是没有关联的。<br><br>我想到了一个不错的解决方法,已经解决这个问题了。谢谢大家的指点。<br><br>解决方法就是&nbsp;type&nbsp;A=&nbsp;class(TThread),这不就都解决了么?[:D]
 
indy控件内部好像也有创建线程的用法,不过它可能耦合没有我的严重,不需要从TThread继承。
 
后退
顶部