如何控制线程的执行和挂起?(100分)

  • 主题发起人 主题发起人 yangjl
  • 开始时间 开始时间
Y

yangjl

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个串行通讯程序带有数据库,在通讯的时候,同时还可以进行一些其他任务,如查询、打印等功能。我打算通讯采用一个线程,运行在后台,该线程执行一次后,我想过几秒后,再让它运行。但我不知道该如何控制这个线程?请各位大侠帮帮我,在此先多谢了!!!
 
作一个定时器,与他同步
线程有关的API:
begin
Thread,ResumeThread,EndThread,SuspendThread
直接使用线程单元更好
 
线程挂起:thread.Suspend
线程执行: thread.resume
 
to takashiki:你是说在建立一个定时线程吗?如果是这样,如何建立啊?
to dfw001:我知道线程挂起:thread.Suspend 线程执行: thread.resume,但要把这段代码加在哪里呢?
 
Timer事件,TThread派生单元,Suspend,Resume。
 
to 影 子:如果使用sleep,那就是用while not terminated了,这样做太浪费CPU了。
wkp13_8:如果使用了timer事件,那还是多线程吗?
 
http://www.delphibbs.com/delphibbs/dispq.asp?LID=526100
 
1.创建线程类,并创建它的实例,这个实例为全局的,也即在主Form中可以访问到它。
2.创建一个Timer线程类,可以定时向主Form发送消息,然后在主Form中控制线程实例的挂起与执行;其实简单一点也可以在主Form中放一个Timer控件,在Timer的事件中处理线程实例的挂起与执行:
if FmyThread.suspended then

FmyThread.Resume
else

FmyThread.Suspended.
 
to lichaogang:我可以这样写吗?
procedure tmythread.Execute;
begin
do
something;//我在线程里面的处理程序
suspend;
//然后把线程挂起来,这样可以吗?
end;
然后在timer事件中把线程唤醒,不知道这样行不行?
 
应该也是可以的,但记得线程有一个属性FreeonSuspended要设为False,否则在挂起时它会被释放。
 
大家还有什么好的办法,说出来与大家分享,我也好把帖子结了。
 
resume, Suspend
 
还有个问题请教:线程resume后,从哪里执行呢?是执行execute吗?
 
哪有FreeonSuspended啊,只有FreeOnTerminate,不过这个和那个没有关系。
用suspend,和 resume是很简单,但是还是有一堆问题,比如多次调用,就会出现很奇怪的现象,
 
TO screen:那你有什么好办法啊?
 
为什么大家不提自己的想法了,我是刚刚接触多线程,希望能得到大家的帮助
 
你可以写个时间函数,在里面线程执行: thread.resume,再线程内部执行过后thread.Suspend.
 
fly2003:时间函数怎么写啊?可否给个例子看看?thread.Suspend加在哪里呢?加在thread.Execute里吗?多谢你的帮助!!!
 
简单就是你用timer试一下,例子我手头没有!
 
后退
顶部