关于线程的概念和做法,帮忙! ( 积分: 50 )

  • 主题发起人 主题发起人 wishme3
  • 开始时间 开始时间
W

wishme3

Unregistered / Unconfirmed
GUEST, unregistred user!
在定时器中建一线程,来定时处理数据,做发如下:
type
TInitThread = class(TThread)
private
procedure ProData;
protected
procedure Execute;
override;
end;
...
...

procedure TInitThread.Execute;
begin
FreeOnTermiNate:=True;
Synchronize(ProData);
end;

procedure TInitThread.ProData;
begin
Screen.Cursor:=crHourGlass;
{做处理的代码}
Screen.Cursor:=crDefault;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var NewThread:TInitThread;
begin
NewThread:=TInitThread.Create(false);
end;

问题:
1、以上做发是否可行,创建线程的方发是否正确
2比如timer是每隔1秒做一次,那么在timer中每秒都创建一个线程,不会造成资源的浪费?
并且影响性能?
 
在定时器中建一线程,来定时处理数据,做发如下:
type
TInitThread = class(TThread)
private
procedure ProData;
protected
procedure Execute;
override;
end;
...
...

procedure TInitThread.Execute;
begin
FreeOnTermiNate:=True;
Synchronize(ProData);
end;

procedure TInitThread.ProData;
begin
Screen.Cursor:=crHourGlass;
{做处理的代码}
Screen.Cursor:=crDefault;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var NewThread:TInitThread;
begin
NewThread:=TInitThread.Create(false);
end;

问题:
1、以上做发是否可行,创建线程的方发是否正确
2比如timer是每隔1秒做一次,那么在timer中每秒都创建一个线程,不会造成资源的浪费?
并且影响性能?
 
线程放在timer里?开玩笑...线程太多会严重占用CPU资源.
 
线程有点问题,缺少构造函数.
 
做个实验 看看机器多长时间没有动静了 就知道了
 
你可以在定时器里去读数据,如果需要用线程处理就再开个线程来处理好了
 
线程的定义和执行都没有问题
关键是如果你的Timer每执行一次,都要创建一个新的线程。这样也不是很严重的问题,关键是看楼主想实现什么功能才这样思考的......
 
你想实现循环吗?
看你每隔一秒执行一次,是数据采集吗?
要是数据采集不用这样做的!
 
用Synchronize的代码应该是在主线程中处理的(记得是这样)
这样用线程好像没什么意义
 
按你的处理办法,在Timer中直接处理会更好的
 
开玩笑,把线程和定时器配对使用,而定时器间隔时间这么短。
你不会这样呀:
while not Terminateddo
begin
定时处理的过程;
Sleep(间隔时间);
end;
另外,线程执行体中只有一个Synchronize(ProData);这样ProData过程实际上是在主线程中执行的,执行时仍然要阻塞主线程使界面操作不流畅的,实在看不出这个线程有它存在的任何必要!
 
接受答案了.
 
后退
顶部