100分有关线程数组创建和终止的高难问题!Delphi高手请进!

tttk 2004-07-29 01:00:48
线程定义如下:
TNPThreadClass = class of TNPThread;线程类定义
TNPThread = class(TThread);父线程定义

TThread1 = class(TNPThread);线程1定义
TThread2 = class(TNPThread);线程2定义

现在数组A类型是TThread1,数组B类型是TThread2,其中各有一定数量的线程。
Arr1: array of TThread1;
Arr2: array of TThread2;

现在想写一个公共函数,要求判断数组中的线程是否超时,如果超时,则强行终止该线程,并为数组变量创建一个新的进程。

function CheckThread(var NPThread: TNPThread);
begin
if 超时 then
begin
TerminateThread(NPThread.ThreadID, 0);
NPThread := TNPThread.create(...);
NPThread.Resume;
...
end;
...
end;

调用:CheckThread(TNPThread(Arr1[0]))

不知以上方法是否有效?您有什么建议?
...全文
182 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tttk 2005-05-19
  • 打赏
  • 举报
回复
感谢大家的回复。

这个问题是我以前做的一个新闻抓取软件里面用到的,我现在一直使用我回复里提到的办法,没有什么问题。

谢谢大家。
ThenLong 2005-05-18
  • 打赏
  • 举报
回复
最好由线程自己判断超时,中止

不然多到一定程度,系统开销太大了
ThenLong 2005-05-18
  • 打赏
  • 举报
回复
基类里弄个CheckXXX;virtual;abstract;
子类实现之,岂不更清晰?
naner_china 2005-05-18
  • 打赏
  • 举报
回复
关注
Up
wlbfeihu 2005-05-18
  • 打赏
  • 举报
回复
线程控制确实麻烦
没有做过这么难的
何鲁青 2005-05-18
  • 打赏
  • 举报
回复
我知道你想把CheckThread用到所有子类的检验里面,其实你可以在函数一开始的时候先检验一下传进来的NPThread到底属于那个子类就可以了,不用非要创建一个类的类,调用类方法的...
何鲁青 2005-05-18
  • 打赏
  • 举报
回复
这里有个问题,就是函数体内的TNPThread.create(...);显然这样创建出来的线程无法被子类使用
///////////为什么这么说那?你可以用is 来判断是那个子类,然后调用子类的Create函数不可以吗?
tttk 2005-05-18
  • 打赏
  • 举报
回复
此贴抓紧回帖,我要结帖了!
donaldtyp 2004-07-30
  • 打赏
  • 举报
回复
我正研究中,学习学习
tttk 2004-07-29
  • 打赏
  • 举报
回复
后一种思路现在运行起来好像没什么问题。
tttk 2004-07-29
  • 打赏
  • 举报
回复
这里有个问题,就是函数体内的TNPThread.create(...);显然这样创建出来的线程无法被子类使用。为此写出下面的函数体:


function CheckThread(NPThreadClass: TNPThreadClass; var NPThread: TNPThread);
begin
if 超时 then
begin
TerminateThread(NPThread.ThreadID, 0);
NPThread := TNPThread(NPThreadClass.NewInstance).create(..);

NPThread.Resume;
...
end;
...
end;

调用:CheckThread(TNPTreadT1, NPThread(Arr1[0]));
这个思路是否正确?会有什么问题?
从零开始讲述Java多线程的核心知识,通过板书和一步一步画图的方式,引领大家逐步去理解和掌握这些知识;并深入析源码实现,理解背后的实现原理,知其然还要知其所以然。从多线程核心基础讲起,理解线程的风险,多种创建线程的方式;再到深入理解线程的状态;然后是线程的基本操作。系统、深入、快速上手实现多线程。 课程目标:    快速上手掌握Java多线程的经典课程,    系统、全面、深入掌握Java多线程的核心知识主讲老师:CC老师     20年Java开发和使用经验,多年的首席架构师和CTO,畅销原创书籍《研磨设计模式》的作者。         参与和领导了上百个大中型项目的设计和开发,在互联网应用系统架构、系统设计、    应用级框架和中间件开发等方面具有很多经验和领悟。    更为难得的是,入行20年,仍然奋战在技术一线,深知一线架构师需要掌握哪些技术、    掌握到什么程度、一线架构设计会遇到哪些坑、如何才能做出最合适的架构设计,经验最难得!适应人群:    想要系统、深入学习Java多线程    已有Java开发基础,想要快速掌握Java多线程    补充Java多线程知识,为进入一线大厂做准备学习方式:随到随学课程内容:第一节课:系统理解Java并发编程的知识体系    1:为什么要掌握Java并发编程    2:整个课程的目标    3:整个课程的学习内容第二节课:线程必备基础知识    1:理解线程是什么,理解进程,图示    2:理解轻量级的含义    3:理解时序调度,线程是时序调度的基本单元,图示    4:理解调度方式:抢占式,图示    5:理解我们写的程序基本都是多线程的应用,图示    6:理解并发和并行,图示    7:为什么需要线程第三节课:线程的风险    1:线程安全性问题,图示    2:线程的活跃度问题:死锁、饥饿、活锁,图示    3:线程的性能问题,这里主要是线程间切换 上下文的开销第四节课:创建线程的方式之一    1: 代码演示:实现Runnable接口的方式来创建线程    2:学习Thread类的方法和属性的应用    3:学习Thread类的源码第五节课:创建线程的方式之二    1:继承Thread的方式来创建线程    2:继续学习Thread类的源码,线程初始化过程    3: 代码演示:演示ThreadGroup    4: 代码演示:演示daemon线程,理解daemon线程和主线程的关系第六节课:创建线程的方式之三    1: 代码演示:匿名内部类的方式来创建线程    2:继续学习Thread类的源码,析run方法的调用过程    3:代码演示:callable的方式来创建线程,带返回值    4: 学习FutureTask的部源码,析run方法到call方法的调用过程第七节课:线程状态详解    1:通过Thread源码来查看线程状态的定义    2:一步一步画图,讲述状态之间的变迁第八节课:线程的基本操作sleep 和yield    1:阅读Thread源码    2:代码演示:sleep的使用    3:代码演示:yield的使用    4:sleep和yield的对比理解第九节课:线程的基本操作join和interrupt    1:阅读Thread源码    2:代码演示:join的使用    3:代码演示:interrupt的使用这里是《Java并发编程与源码析》的第一部——讲述多线程核心基础实现快速上手多线程的经典之作   

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧