急,在多线程状态下,我想让每一子线程只运行N秒,然后删除该线程,如何做到呢? (100分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间
难啊,线程是自动分配的,加几个WAIT试试
 
用另外一个线程或主线程,去控制它们。
线程一执行,在主线程中记录开始时间,
主线程定时判断各线程的运行时间,然后终止它们。
 
是否可以在子线程里定义一个定时器,到时间了,自己删除自己呢?
 
可以的,在线程内放定时器,自毁
 
In Thread:
Var
TmD:DWord;
Begin
TmD:=GetTickCount()+N*1000; { N s }
While (TmD>GetTickCount()) Do
Begin
Write your thread code in hear...
End;
End;
 
主线程控制呀
 
哈哈哈哈,我说多线程是脑筋急转弯的游戏,连 枫 都没转过来。正好找您呢,您的帖子
关于 msn 登记的那个,有空是不是帮忙再整理整理,不过一个一个加起来确实是#$%@^&*
:-)
 
同意wql,线程内放定时器,线程启动时定时器开始记时,时间到了就触发终止线程。
 
to 云携雨(新生),
呵呵,一定,一定,,

 
只运行几秒是什么意思?指的是从创建开始到要结束它之间的所有时间还是该线程确确实实
运行了几秒(被调入运行),如果是前者我觉得无论是在各线程中设计数器还是在主线程中
设计数器都可以实现,但如果是值得是或者就比较麻烦了。
 
我试了一下,发现我用Terminate自毁的时候出现错误,用FREE也不行,请问如何做到把线程安全自毁它呢?
 
线程自毁?为什么我的线程如果没有一个循环,一下就不见了,好象不用怎么释放的吧,
最多Close一下那个Handle吧^_^
 
Procedure YouThread.Execute;
Var
TmD:DWord;
Begin
FreeOnTerminate:=True; // 现成结束自动释放内存。

TmD:=GetTickCount()+N*1000; { N s }
While (TmD>GetTickCount()) Do
Begin
Write your thread code in hear...
End;
End;
 
你问的问题答案已经很清楚,该给分了!
 
to wql
你那是个循环吧,但我的线程只是执行一次的。

FreeOnTerminate:=True; // 现成结束自动释放内存。
这个应该是线程结束后释放内存用的吧,可是我的线程都都没有结束这个就没有什么用了吧。

to everyone
我的程序里,每一个子线程运行的霎时间可能很长,但我不想它们运行这么长,就想给它们定一个运行
时间,到时间了,不管工作有没有做完,都要停止并释放线程。
 
1.主进程控制。如果线程Terminate不掉, 那么调用TerminateThread强杀。
2.线程控制。 如果你的线程完整运行需要超过几秒的话,那么不可能没有循环。 如果能控制这个循环那么在循环中判断Terminated并退出即可。 如果不能控制这个循环(比如调用ado什么的),那么还是用方法一吧。
 
如果你的线程完整运行需要超过几秒的话,那么不可能没有循环。
不要那么肯定,比如说Socket连接,超过几秒没响应是很正常的。

所以,还是要用主线程控制,维护一个线程表,建议用TList
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部