线程的问题,如何判断其是否活跃。急!!! (30分)
分类:多线程 wicked (2003-05-02 9:43:00)
请先看下面代码
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if 线程1不活跃 then
procedure1
end;
我是想在timer事件中判断线程不活跃时,就执行procedure1,但是我不知道如何判断指定线程是否活跃,请高手指点!!!
另外,请注意这是在timer事件中!!!
谢谢
张无忌 (2003-05-02 9:47:00)
你难道不能设置一个标志,我不知道你判断线程活跃的标准是什么?
本来WIN9X。WIN NT都是分时间片执行线程的,执行你的代码的时候,
其他线程都是挂起,所以你这个判断的结果都是一样,其他线程不
活跃
wicked (2003-05-02 10:06:00)
对不起,应该是这样:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if 线程1不活跃 then
do
线程1
end;
怎么判断,另外我还想让线程1结束后,不再运行(因为是在timer事件中),请问如何实现?
能给我个简单的代码吗?
小笨苯 (2003-05-02 10:16:00)
线程对象的Suspended为true就表示线程处于被挂起状态。
你能不能把你要实现什么功能说出来呀?
诸葛白痴 (2003-05-02 10:17:00)
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if 线程1不活跃 and not 已经运行过(在线程1运行时设这个变量为true) then
do
线程1
end;
你是用来判断线程1是否在运行吧,不活跃是什么意思,如果是是否在运行可以用Terminated
wicked (2003-05-02 10:34:00)
我的想法是:1.如果线程A不存在的话,就运行它;
2.运行线程A一次后就不再运行;
3.我想让主程序自动判断,所以加入了timer。
谢谢!
远帆 (2003-05-02 10:45:00)
1.如果线程A不存在的话,就运行它;(应该是创建它吧?)
2.运行线程A一次后就不再运行;(设定FreeOnTerminate:=True;即可)
小笨苯 (2003-05-02 10:45:00)
1.>>如果线程A不存在的话,就运行它;
你打算怎么判断呀?判断实例是否存在吗?Assigned(实例)?
2.>>运行线程A一次后就不再运行
这是什么意思呀?是想让它运行一次就自动删除了呢?还是暂时不删除,挂起呢?
3.次要的,上面的问题清楚了,这个就不是问题了
wicked (2003-05-02 11:12:00)
1.我另外有一个自己建立的过程用来创建线程A并完成一些事情,线程A应该就算实例了把
2.由于是自己创建的过程,所以我想运行一次就删除线程A,下次再调用过程就是了。
3.等再有任务来时,由于timer的存在,所以会判断出线程A是否存在。如果不存在的话,就
调用我自己创建的过程来建立线程A。
4.我想1-3的过程是往复的,就是想让程序具有一定的只能性。
谢了!
xwings (2003-05-02 12:14:00)
re:1
线程A是实例。你的procedure直接创建线程并挂起,设定一些资源,然后设置线程的resume
re:2
创建线程的时候设置freeOnTerminate := true 这样线程的Execute过程运行结束之后会自动free,不用你去删除
re:3
你的timer是不断检测任务呢还是不断检测线程?
任务来了应该有个触发的事件,无论是你timer检测到的还是其他过程,如果线程A不存在就调用1里面的过程创建。如果线程A存在你要如何处理?
另外判断线程A是否Free有很多方法,可以设置一个全局变量,在线程A的Create的开始设置为true,Destroy时候设置为false。还有很多其他办法...
wicked (2003-05-04 14:00:00)
其实我是通讯过程中使用线程,进程1向进程2发消息,进程2始终进行监视(所以设置了Timer)
,一旦进程2检测到有任务(Timer中检测),就调用线程做任务,然后把结果返回!
我疑惑的地方就是如何在Timer事件中判断线程的状态,如下:
1。如果线程已经在执行时,就不需要再创建线程了
2。要判断线程的状态,一旦结束后就把结果返回
熟悉线程的朋友请帮忙!谢了!
xwings (2003-05-04 14:25:00)
既然你在线程2设置timer来进行监视,那为什么不在主线程中设置timer监视呢?
判断线程是否执行的方法我已经说过了。
其他的应该没有问题了吧?
wicked (2003-05-05 9:12:00)
多人接受答案了。
xwings-10,小笨苯-10,张无忌-10,的回答最终被接受。