简单问题 ( 积分: 50 )

  • 主题发起人 主题发起人 tlldelphi
  • 开始时间 开始时间
T

tlldelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
1。线程有什么用?
2。如何创建线程,释放线程?给个实例
 
1。线程有什么用?
2。如何创建线程,释放线程?给个实例
 
1.
一般说来,使用多线程具有以下优点:
1.由于CPU处理速度比较快,可以使用户在做一件事情的时候还可以做另外一件事。比如在有些杀毒软件杀毒的时候,还可以通过菜单来浏览病毒清单。
2.在多个CPU的情况下,可以充分利用硬件的优势,将一个大任务分成几个小任务由不同的CPU来完成。
3.可以为每个线程设置优先级,调整工作的进度。
2.
编写基于线程的程序,既可以使用Windows提供的API函数,也可以使用Delphi提供的线程对象。具体怎么做还是请楼主看相关资料吧
 
第三、如何开发多线程的程序?
编写基于线程的程序,既可以使用Windows提供的API函数,也可以使用Delphi提供的线程对象。而使用Delphi的线程对象(TThread对象),则可使编写线程程序变得简单、高效。TThread对象提供了许多特性和方法(成员函数),它类将Windows API函数中关于多线程方面的函数封装到了一起,你只要根据工作需要对这些函数或方法进行重写,即可在程序中实现多线程机制。Tthread类是TObject对象的直接派生类。与其它大多数Delphi类和构件不同的是,你不能在程序中直接使用该对象,而必须从Tthread类产生一个新的派生类,并对需要使用的方法进行重写,以重载(Override)Tthread类的方法。
利用TThread类来编写多线程应用程序的一般步骤如下:
1.从TThread类派生出一个新的线程类。
2.创建线程对象。
3.设置线程对象的属性,比如优先级等。
4.根据具体情况挂起或唤醒线程。
5.结束线程。
在Delphi中,你既可以通过直接书写线程代码来创建线程,也可以Delphi的File菜单的New命令向当前项目文件加入一个线程对象来实现。两者结果都一样,都是产生一个Tthread类的派生类,下面就使用后一种方法进行说明。
选择File菜单的New命令,打开New Items对话框,选择New页标签下的Thread Object图标(如图1所示),打开New Thread Object对话框(如图2所示)。在New Thread Object对话框的Class Name编辑框,输入创建线程的类名,然后选择OK按钮,则Delphi自动生成一个新的代码文件,该代码文件即为新线程类的代码文件
unit Unit2;
interface
uses
Classes;
type
test = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
end;
implementation
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure test.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
}
{ test }
procedure test.Execute;
begin
{ Place thread code here }
end;
end.
该代码文件生成一个线程类的派生类,并提供了需要派生类覆盖的方法Execute说明。文件中还包含如何编写处理VCL构件方法的说明信息。下面就可以根据特殊的需要修改新的线程类了。
TThread类有一个构造函数Create,函数原型如下:constructor Create(CreateSuspended: Boolean);
其中参数CreateSuspended为一个布尔类型的变量。如果设置为False,则线程对象创建后立即调用TThread类的另一个过程Execute,也就是立即开始执行线程的操作;如果设置为True,则线程对象创建后,要调用过程Resume后线程的操作才开始。可以在TThread类的派生类中重新定义Create构造函数,用来对派生类中的一些属性进行初始化。
我们可以自己定义TThread类的派生类中的Execute过程,过程Execute中的代码就是线程要做的工作。如果Execute过程执行完毕,则该线程就结束了,并释放线程占用的栈空间。通常在Execute过程的重载函数中要有一个repeat…until语句,如:
procedure TSquareThread.Execute;
begin
……
repeat
…… // 具体的操作
until Terminated;
// 判断是否应该结束线程
……
end;
其中Terminated为线程类的一个属性,用来标志是否应该结束线程。
 
楼主,不要什么问题都来这里提问,我上网速度慢,为了看你这个帖子费了我N多money,麻烦你提点深刻点的好不好,我也是学习,得罪之处,谅解......
 
靠,楼上的有你这么说话的么。。
什么叫 深刻点 的啊。。
 
to 来如风,
你觉得这个帖子很有深度么。。。?所谓学问,是学为主,问为辅;自己动脑到无法解决之地步才烦于他人,有空你(以及楼主)可以研习一下余世维教授的经典讲座。
另,既然能上网,就是已经拥有了一个无限海量的知识库,搜索引擎无比,诸如楼主此类的问题还需要问么?
小人不才,但凡疑惑基本都能通过搜索觅得前人习之经验
提问前还望楼主三思,以免贻笑大方
 
再to 来如风,
呵呵,不好意思,在线列表里找不到您的大名,不知该如何发消息了。。。-_-b
楼主这个问题要说清的确可以写一本书了,所以我的想法是此类大而不着边际的问题,问前就应该考虑一下是否别人能针对你的问题回答到要点上,是否问的合理。DFW里类似物理头的问题比较多,让人手足无措
有所冒犯,海涵
 
to:dongy_143,
别人都标识了:简单问题,你如果真的认为自己有深度的话,你可以不进来看呀,何必浪费money,更浪费时间
 
to delphi new,
既然楼主和你都知道是“简单问题”,为什么还要问呢?这么多方法可以解决还需要劳烦别人?
 
在单CPU上,在使用或是设置新选中进程的CPU环境,我觉得线程的调度会节省不少处理机的时间,另外,在分配资源上也能节省大量的时间。
 
我觉得多线程还是很有用的,你像我现在干的这个自动控制,同时要采集和控制数据,不用多线程是肯定不能实现的。
最简单的编写多线程的方法,你在delphi的file,new,下面的other里选thread object就能创建多线程了!
 
to:islet8
有的知识需要从多个方面去获取的,你所谓的‘凡疑惑基本都能通过搜索觅得前人习之经验
’,你又何必进入这个网站呢?再说从这个网站这个方面去获取不是一种方法吗?
‘提问需有深度’,难道你自以为自己很有深度?就算你现在很有深度,难道是生来具有的吗,我相信毕竟每个人都有一个成长的过程吧?
 
跑题啦,跑题啦......如果感觉问题简单的话,可以不说话,没必要说这么多XX,呵呵...
还有那个来如风,砍了你;把你的分抢完...
 
不懂就问,人之常情啊..
 
哈哈哈哈哈
 
to wwdelphi:
你好,我正好也在写一个自动采集串口数据的多线程,能不能请教一下,我在应用程序的基础上开启一线程,但采集完数据后,程序变成没有响应,请问下是什么原因啊?谢谢了
 
后退
顶部