线程定义 TClientDataThread = class(TThread)
private
Bufferdatastr :string;
public
BufferdatastrList:TStringlist;
clienthost:string;
paused:boolean;
TcpClient_DataThread:TTcpClient;
DT_ADC:TADOConnection;
procedure synchNewData;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
end;
线程的动作
procedure TClientDataThread.Execute;
begin
while not Terminated do
begin
while BufferdatastrList.Count=0 do //感觉这里有点不对劲的地方,这里是不是一直会占用系统资源?
begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
sleep(1);
end;
synchNewData;
WaitFor;
end;
TcpClient_DataThread.Free;
if DT_ADC<>nil then
begin
DT_ADC.Connected:=false;
DT_ADC.free;
end;
end;
先谢谢大家啦!!
private
Bufferdatastr :string;
public
BufferdatastrList:TStringlist;
clienthost:string;
paused:boolean;
TcpClient_DataThread:TTcpClient;
DT_ADC:TADOConnection;
procedure synchNewData;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
end;
线程的动作
procedure TClientDataThread.Execute;
begin
while not Terminated do
begin
while BufferdatastrList.Count=0 do //感觉这里有点不对劲的地方,这里是不是一直会占用系统资源?
begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
sleep(1);
end;
synchNewData;
WaitFor;
end;
TcpClient_DataThread.Free;
if DT_ADC<>nil then
begin
DT_ADC.Connected:=false;
DT_ADC.free;
end;
end;
先谢谢大家啦!!
解决方案 »
- 高分求一个sql写的des加密算法存储过程,分不够再加。用于 sql server
- 刚开始学Delphi,学到数据库操作的时候,有关close的一个问题,请教一下
- 请教,如何控制修改接收的按键信息?关于TEdit控件
- 高手们,这个问题有解吗?动态设定Dxdbgrid属性问题,解决马上结贴!
- 求助:如何检测文件夹下文件的变化??
- 关于窗体Destroy时报错的问题。
- 挺不住了,帮忙分析一下:)
- 请教大家一个多线程发送email的问题,谢谢了
- 请求帮助
- 请问:"Variant is not an array"是什么错误?
- 关于DELPHI5多线程同步的问题
- 自定义图形组件动态创建时不显示是怎么回事?
begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
sleep(1);--------------如果这里不加这句的话 就会一直占用系统资源,加了就没事了~~~~~
end;
你要等待可以用WaitForSingleObject,自己用CreateEvent创建个事件
然后定时器扫描BufferdatastrList.Count ,符合条件时唤醒resume
注意:线程里面不能用上句。你看看诸多例子中,都没有这样用的。
begin //记得线程好象有waitfor的,如果这里要改用waitfor应该怎样去改啊?
application.ProcessMessages; //另外BufferdatastrList是程序主线程给它添加节点的
sleep(1);--------------如果这里不加这句的话 就会一直占用系统资源,加了就没事了~~~~~
end;你的线程在空转,消耗CPU不知道么??
BufferdatastrList.Count=0
这个如果是大多数时间成立,而且也必须要做操作的话,那么表明的业务很频繁,频繁到要一直占用CPU。
如果你的要求不是1MS就轮巡一次的话,可以SLEEP久点,防止CPU空转。
每次对BufferdatastrList操作的时候发送event,
......
var
Fevent:TSimpleEvent;
..... FEvent:=TSimpleEvent.Create;
.......
if Fevent.WaitFor(300)<>wrTimeout then
.....
Fevent.ResetEvent;
.....