delphi多线程怎么解决数据处理速度跟不上数据接收的速度

delphi多线程怎么解决数据处理速度跟不上数据接收的速度,第1张

这种问题必须要应用多线程处理,关于你本身的问题你可以用线程池来处理,这个开销比新创建线程要小一些,须要你本身写一个线程池处收成重点是可以快速取到余暇线程),3 解算后的数据发出,当时光包含在2中的最大年夜耗不时光内1 接收事宜触发接收过程,进行数据预处理我不知道你的预处理是否是必须的,并且必须是在线程处理之前完成,我认为接收事宜触发接收过程,收到数据立时放入主线程(也就是我说的线程池治理线程),之后你的过程持续等待下一波数据,而子线程开端处理数据。2 数据预处理后,发出自定义事宜或者消息触发数据解算线程,解算最大年夜耗时200-250ms,最小100ms没须要定义什么自定义消息,你可以在主线程中,等待子线程完成计算,然后做最后的处理。计算后的数据须要发出? 那一样的事理,按照次序发出即可。

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

hloopHandle:Thandle ; //线程 句柄

dloopThreadID:DWORD ; //线程 id

function doloop(P:pointer):Longint;stdcall;

implementation

{$R dfm}

//启动线程处理

procedure TForm1Button1Click(Sender: TObject);

begin

hloopHandle := CreateThread(nil,0,@doloop,nil,0,dloopThreadID);

if hloopHandle=0 then

begin

messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);

abort;

end;

end;

//终止线程

procedure TForm1Button2Click(Sender: TObject);

begin

if hloopHandle<>0 then

TerminateThread(hloopHandle,dloopThreadID);

end;

//线程处理函数

function doloop(P:pointer):Longint;stdcall;

var

i:integer;

begin

for i:=0 to 10000 do

begin

form1Edit1Text:=inttostr(i);

end;

end;

end

没见过idhhtpadoquery

只知道 id>

unit bncthrd;

interface

uses

winprocs,classes,graphics,extctrls;

type

tbouncethread=class(tthread)

private

fshape:tshape;

fxspeed:integer;

fyspeed:integer;

procedure moveshape;

protected

procedure execute;override;

public

constructor create(suspended:boolean;shape:tshape;xspeed,yspeed:integer);

propertyshape:tshapereadfshape;

end;

implementation

procedure tbouadmoveshape;

var

maxheight,maxwidth:integer;

begin

with fshape do

begin

left:=left+fxspeed;

top:=top+fyspeed;

if(left=0) or(left+width=parentwidth)then

fxspeed:=fxspeed-1;

if(top=0)or(top=height+parentheight)then

fyspeed:=fyspeed-1;

end;

end;

procedure tbouncethreadexecute;

begin

while not terminated do

begin

synchronize(moveshape);

end;

end;

constructor tbouncethreadcreate(suspended:boolean;shape:tshape;

xspeed,yspeed:integer);

begin

inherited create(suspended);

fshape:=shape;

fxspeed:=xspeed;{x轴走向的速度}

fyspeed:=yspeed;{y轴走向的速度}

freeonterminate:=true;

end;

end

执行时我们可以新建一个程序,然后在uses部分加入以上的bncthrd单元,再在它的窗体form1上加入两个shape控件shape1和shape2,shape1可以是一个矩形而shape2

是一个圆。加入以下的代码就可以让矩形和圆动起来。

unit Unit1;

interface

uses

bncthrd,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm)

Shape1: TShape;

Shape2: TShape;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R DFM}

procedure TForm1Button1Click(Sender: TObject);

begin

tbouncethreadcreate(false,shape1,1,2);

tbouncethreadcreate(false,shape2,2,3);

end;

end

以上就是关于delphi多线程怎么解决数据处理速度跟不上数据接收的速度全部的内容,包括:delphi多线程怎么解决数据处理速度跟不上数据接收的速度、求DELPHI多线程例程、delphi 多线程问题。 我用多线程 *** 作VCL控件,(不可视的,idhhtp.adoquery)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9333559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存