L leoduba Unregistered / Unconfirmed GUEST, unregistred user! 2007-02-26 #1 我现在要实现IdTCPClient线程运行,要求是,建立一个线程读取IdTCPClient数据,读取完数据后,线程自动释放...............然后下次再重新建立线程再读取!请问怎样能使线程在运行一次后自动释放...........另外,怎样使线程运行时不再建立新的线程,十分感谢
我现在要实现IdTCPClient线程运行,要求是,建立一个线程读取IdTCPClient数据,读取完数据后,线程自动释放...............然后下次再重新建立线程再读取!请问怎样能使线程在运行一次后自动释放...........另外,怎样使线程运行时不再建立新的线程,十分感谢
S szf Unregistered / Unconfirmed GUEST, unregistred user! 2007-02-27 #2 最简单的方法: 放置一个TIdThreadComponent组件,StopMode=smTerminate,设置Active:=True,然后在它的OnRun方法中读取IdTCPClient的数据. 这时,如果重复设置Active为True,不会建立新线程,此组件管理的线程在执行完后自动释放。 要注意的是,Indy9中的TIdThreadComponent组件在Active前很多线程相关的属性都不能读,因为那时它的Thread为nil,会操作空指针。Indy10则没这个问题。 但我在项目中用Indy10的TCPClient组件出现过问题,后改用indy9了,自己权衡用哪个版本吧。
最简单的方法: 放置一个TIdThreadComponent组件,StopMode=smTerminate,设置Active:=True,然后在它的OnRun方法中读取IdTCPClient的数据. 这时,如果重复设置Active为True,不会建立新线程,此组件管理的线程在执行完后自动释放。 要注意的是,Indy9中的TIdThreadComponent组件在Active前很多线程相关的属性都不能读,因为那时它的Thread为nil,会操作空指针。Indy10则没这个问题。 但我在项目中用Indy10的TCPClient组件出现过问题,后改用indy9了,自己权衡用哪个版本吧。