当前位置:首页 » 编程软件 » delphi多线程编程

delphi多线程编程

发布时间: 2022-08-12 17:27:35

Ⅰ delphi 多线程编程问题

多线程中使用方法注意以下几点就可以了!
1.在更新VCL控件的时候使用Synchronize.
2.如果线程内定义了全局变量,如果想修改它的话,一般常用临界,如果是多进程方式同步的话使用互斥等....
3.你所说的使用synchonrize和不使用synchronize结果一样,没有什么区别.!这是在单个线程中没有发现问题,如果多个线程同时运行此段代码就会出现内存写入和读取错误了!

Ⅱ Delphi 如何用多线程进行数据采集

就以下两个方面来讲解以下在delphi中如何用多线程进行数据采集:
---- 1. 多线程进行数据采集应解决的问题
---- 其实,多线程程序设计复杂是暂时的;如果,你采用传统的C进行多线程的设计,那么你必须自己控制线程间的同步。那将是很复杂的。但是,如果利用面向对象的设计方法,采用Delphi进行多线程程序设计,问题就简单多了。这是因为,Delphi已将多线程的复杂性替我们处理了,我们所要做的就是继承。
---- 具体地说,多线程数据采集需要完成以下工作:
---- ① 从TThread类派生一个自己的类SampleThread。这就是我们用于数据采集的类。进行采集时,只需要简单地创建一个SampleThread的实例。
---- ② 重载超类TThread的Execute方法。在这一方法中将具体地执行数据采集任务。
---- ③ 如果希望一边采集一边显示,就在编写几个用于显示采集进度的过程,供Execute方法调用。
---- TThread类中最常用的属性/方法如下:
Create方法:constructor Create
(CreateSuspended: Boolean);
---- 其中CreateSuspended参数确定线程在创建时是否立即执行。如果为True,新线程在创建后被挂起;如果为False,线程在创建后立即执行。
FreeOnTerminate属性:
property FreeOnTerminate: Boolean;
---- 该属性确定程序员是否负责撤消该线程。如果该属性为True,VCL将在该线程终止时自动撤消线程对象。它的缺省值为False。
OnTerminate属性:
property OnTerminate: TNotifyEvent;
---- 该属性指定一个当线程终止时发生的事件。
---- 下面看一个具体的例子:
---- 2. 多线程数据采集的实现
---- 这是笔者开发的一个测抽油机功图的程序。它的功能是采集抽油机悬点的载荷及位移数据,经过处理后做出抽油机的功图。图1(略)所示是数据采集时的界面。点“采集数据”按钮后,程序将创建一新的线程,并设置其属性。这一新线程将完成数据采集任务。程序如下:
Procere TsampleForm.
DoSampleBtnClick(Sender: TObject);
Begin
ReDrawBtn.Enabled := True;
DoSampleBtn.Enabled := False;
FFTBtn.Enabled := True;
TheSampler := SampleThread.Create(False);
创建采集线程
TheSampler.OnTerminate := FFTBtnClick;
采集完成后要执行的任务
TheSampler.FreeOnTerminate := True;
采集完成后撤消
End;
---- 采集线程的类定义如下:
Type
SampleThread = class(TThread)
Public
function AdRead(ach: byte): integer; safecall;
读A/D卡的函数
procere UpdateCaption;
显示采集所用时间
private
{ Private declarations }
protected
thes, thep: real;
dt: real;
id: integer;
st, ed: LongInt;
procere Execute; override;
这是关键。
End;
---- 在这个类中定义了一个函数AdRead用于操作A/D卡,两个过程用于显示采集的进度与所用时间。需要注意的是AdRead函数是用汇编写的,参数调用格式必须是safecall。
---- 关键的重载方法Execute的代码如下:
Procere SampleThread.Execute;
Begin
StartTicker := GetTickCount;
id := 0;
Repeat
thes := Adread(15) * ad2mv * mv2l;
采集第15通道
thep := Adread(3) * ad2mv * mv2n;
采集第3通道
dt := GetTickCount - StartTicker;
sarray[id] := thes;
parray[id] := thep;
tarray[id] := dt;
inc(id);
Synchronize(UpdateCaption);
注意:显示采集进度
Until id >=4096;
ed := GetTickCount;
Synchronize(ShowCostTime);
注意:显示所用时间
end;
---- 从以上代码中可见,Execute与一般的代码并无本质区别。仅有的区别是显示采集进度和显示所用时间时,不能直接调用各自的过程,而是通过调用Synchronize间接地调用。这样作是为了保持进程间的同步。

Ⅲ Delphi多线程怎么处理

给你一个简单的参考代码:
delphi线程的创建、挂起、激活与终止
procere
tform1.button1click(sender:
tobject);
begin
//创建线程,同时线程函数被调用
hthread:=createthread(nil,0,@mythreadfunc,nil,0,threadid);
end;
procere
tform1.button2click(sender:
tobject);
begin
suspendthread(hthread);
//挂起线程
end;
procere
tform1.button3click(sender:
tobject);
begin
resumethread(hthread);
//
激活线程
end;
procere
tform1.button4click(sender:
tobject);
begin
terminatethread(hthread,0);
//终止线程
end;

Ⅳ 怎么样使用Delphi多线程下的ADO编程

由于ADO控件的线程不安全性(事实上这种不安全性是来自Micrsoft ADO Library,所以在其它开发工具中也存在同样的问题)因此在使用多线程ADO编程时应该注意一下问题:
第一:要保证每个线程都拥有自己的会话。
第二:作为客户端程序应该尽可能的减少与数据库库服务器的连接数。
第三:在退出线程之前确保释放所有的资源。

Ⅳ 高分求解Delphi多线程编程

定义一个全局变量 i 定义一个定时器 Timer 间隔时间设置为20秒
注意在 递增变量的时候 一定要加锁 防止两个线程同时递增这个变量

声明一个临界区变量 L:TRTLCriticalSection
程序创建时 初始化临界区变量 InitializeCriticalSection(L)

递增i时:锁住临界区
EnterCriticalSection(L);//进入临界区
inc(i)
LeaveCriticalSection(L);//退出临界区

程序结束时 删除临界区变量
DeleteCriticalSection(L)

timer在20秒的时候检测i的值就可以了

临界区变量保证在enter和leave之间的代码同时只能有一个线程访问
防止了变量访问的冲突

Ⅵ 请教delphi多线程技术监控多个串口

要弄清楚Delphi串口编程的问题,这是程序的必备部分,你可以参考程序员大本营中的源码,一定能找到这样的例子。

2,参考变频器手册,找到相应的指令,按照规范向变频器发指令,就可以控制电机和监控了。

这是你的实习课程,正好可以锻炼你这方面的能力,建议一定要不怕困难,克服几个难题后,你的能力会有质的提升。

你们的这个题目不错,很有实用价值。其实我以前做过一个项目,就是做这样的一个程序。

Ⅶ 请教编程高手-关于多线程与消息队列(DELPHI)

DELPHI中,可以创建线程的对象。
对这个对象进行操作就可以了。

热点内容
手机f加密 发布:2024-05-19 03:28:47 浏览:225
用什么密码写日记 发布:2024-05-19 03:27:57 浏览:303
数据库access2003 发布:2024-05-19 02:49:39 浏览:620
碧蓝航线pc挂机脚本 发布:2024-05-19 02:30:03 浏览:589
脚本fir 发布:2024-05-19 02:28:57 浏览:261
阿里云独享服务器 发布:2024-05-19 02:23:54 浏览:253
织梦源码ga 发布:2024-05-19 02:23:20 浏览:571
java文件名后缀 发布:2024-05-19 02:14:39 浏览:956
快手点榜脚本 发布:2024-05-19 02:08:44 浏览:163
pythonforinkeys 发布:2024-05-19 01:55:44 浏览:793