Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-18 #1 我在做一个串行通讯程序带有数据库,在通讯的时候,同时还可以进行一些其他任务,如查询、打印等功能。我打算通讯采用一个线程,运行在后台,该线程执行一次后,我想过几秒后,再让它运行。但我不知道该如何控制这个线程?请各位大侠帮帮我,在此先多谢了!!!
我在做一个串行通讯程序带有数据库,在通讯的时候,同时还可以进行一些其他任务,如查询、打印等功能。我打算通讯采用一个线程,运行在后台,该线程执行一次后,我想过几秒后,再让它运行。但我不知道该如何控制这个线程?请各位大侠帮帮我,在此先多谢了!!!
T takashiki Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-18 #2 作一个定时器,与他同步 线程有关的API: begin Thread,ResumeThread,EndThread,SuspendThread 直接使用线程单元更好
D dfw001 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-18 #3 线程挂起:thread.Suspend 线程执行: thread.resume
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #4 to takashiki:你是说在建立一个定时线程吗?如果是这样,如何建立啊? to dfw001:我知道线程挂起:thread.Suspend 线程执行: thread.resume,但要把这段代码加在哪里呢?
to takashiki:你是说在建立一个定时线程吗?如果是这样,如何建立啊? to dfw001:我知道线程挂起:thread.Suspend 线程执行: thread.resume,但要把这段代码加在哪里呢?
W wkp13_8 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #6 Timer事件,TThread派生单元,Suspend,Resume。
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #7 to 影 子:如果使用sleep,那就是用while not terminated了,这样做太浪费CPU了。 wkp13_8:如果使用了timer事件,那还是多线程吗?
影 影 子 Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #8 http://www.delphibbs.com/delphibbs/dispq.asp?LID=526100
L lichaogang Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #9 1.创建线程类,并创建它的实例,这个实例为全局的,也即在主Form中可以访问到它。 2.创建一个Timer线程类,可以定时向主Form发送消息,然后在主Form中控制线程实例的挂起与执行;其实简单一点也可以在主Form中放一个Timer控件,在Timer的事件中处理线程实例的挂起与执行: if FmyThread.suspended then FmyThread.Resume else FmyThread.Suspended.
1.创建线程类,并创建它的实例,这个实例为全局的,也即在主Form中可以访问到它。 2.创建一个Timer线程类,可以定时向主Form发送消息,然后在主Form中控制线程实例的挂起与执行;其实简单一点也可以在主Form中放一个Timer控件,在Timer的事件中处理线程实例的挂起与执行: if FmyThread.suspended then FmyThread.Resume else FmyThread.Suspended.
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #10 to lichaogang:我可以这样写吗? procedure tmythread.Execute; begin do something;//我在线程里面的处理程序 suspend; //然后把线程挂起来,这样可以吗? end; 然后在timer事件中把线程唤醒,不知道这样行不行?
to lichaogang:我可以这样写吗? procedure tmythread.Execute; begin do something;//我在线程里面的处理程序 suspend; //然后把线程挂起来,这样可以吗? end; 然后在timer事件中把线程唤醒,不知道这样行不行?
L lichaogang Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #11 应该也是可以的,但记得线程有一个属性FreeonSuspended要设为False,否则在挂起时它会被释放。
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-19 #12 大家还有什么好的办法,说出来与大家分享,我也好把帖子结了。
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-20 #14 还有个问题请教:线程resume后,从哪里执行呢?是执行execute吗?
S screen Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-20 #15 哪有FreeonSuspended啊,只有FreeOnTerminate,不过这个和那个没有关系。 用suspend,和 resume是很简单,但是还是有一堆问题,比如多次调用,就会出现很奇怪的现象,
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-08-24 #17 为什么大家不提自己的想法了,我是刚刚接触多线程,希望能得到大家的帮助
F fly2003 Unregistered / Unconfirmed GUEST, unregistred user! 2003-09-18 #18 你可以写个时间函数,在里面线程执行: thread.resume,再线程内部执行过后thread.Suspend.
Y yangjl Unregistered / Unconfirmed GUEST, unregistred user! 2003-09-19 #19 fly2003:时间函数怎么写啊?可否给个例子看看?thread.Suspend加在哪里呢?加在thread.Execute里吗?多谢你的帮助!!!